스타일시트와 xslt proc로 xslt를 사용하여 xml에서 요소를 제거하는 방법은 무엇입니까?
다음과 같은 형태의 XML 파일을 많이 가지고 있습니다.
<Element fruit="apple" animal="cat" />
파일에서 제거할 파일입니다.
XSLT 스타일시트와 Linux 명령줄 유틸리티 xsltproc를 사용하여 어떻게 해야 합니까?
이 시점까지 스크립트에서 제거하고자 하는 요소가 포함된 파일 목록을 이미 가지고 있으므로 단일 파일을 매개 변수로 사용할 수 있습니다.
편집: 그 질문은 원래 의도가 부족했습니다.
제가 이루고자 하는 것은 (fruit=="apple" & animal=="cat") 요소 전체를 제거하는 것입니다.같은 문서에 "Element"라는 이름의 요소들이 많이 있는데, 이것들이 남아있기를 바랍니다. 그래서
<Element fruit="orange" animal="dog" />
<Element fruit="apple" animal="cat" />
<Element fruit="pear" animal="wild three eyed mongoose of kentucky" />
다음이 됨:
<Element fruit="orange" animal="dog" />
<Element fruit="pear" animal="wild three eyed mongoose of kentucky" />
가장 기본적인 XSLT 설계 패턴 중 하나인 "아이덴티티 변환(아이덴티티 변환)"을 사용하면 다음과 같이 쓸 수 있습니다.
<xsl:스타일시트 버전="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform "> <xsl:outputomit-xml-declar화="yes"/> <xsl:template match="노드 ()|@*"><xsl:copy><xsl:apply-templates 선택="노드 ()|@*"/></xsl:copy></xsl: template> <xsl:template 일치="요소[@fruit='apple' and @animal='cat']"/></xsl:스타일시트>
두 번째 템플릿이 값이 "apple"인 속성 "fruit"과 값이 "cat"인 속성 "animal"인 "Element"라는 이름의 요소에 대해서만 ID(1번째) 템플릿을 재정의하는 방법에 유의하십시오.이 템플릿에는 빈 본문이 있으므로 일치하는 요소가 단순히 무시됩니다(일치할 때는 아무것도 생성되지 않음).
이 변환이 다음 소스 XML 문서에 적용될 경우:
<doc>... <요소명="동일">foo</요소>... <요소 과일="사과" 동물="고양이" /><요소과일="pear" 동물="고양이" /><요소명="same">baz</요소>... <요소명="동일">풋바</요소>... </doc>
원하는 결과가 생성됩니다.
<doc>... <요소명="동일">foo</요소>... <요소과일="pear" 동물="고양이"/><요소명="same">baz</요소>... <요소명="동일">풋바</요소>... </doc>
ID 템플릿 사용 및 재정의에 대한 더 많은 코드 조각은 여기에서 확인할 수 있습니다.
@Dimtre Novatchev의 대답은 분명 올바르고 우아하지만, 일반화(OP가 묻지 않은)가 있습니다. 필터링하고 싶은 요소에도 보관하고 싶은 하위 요소나 텍스트가 있다면 어떨까요?
저는 이 작은 변화가 이 경우를 포함한다고 생각합니다.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- drop DropMe elements, keeping child text and elements -->
<xsl:template match="DropMe">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
일치 조건은 다른 속성 등을 지정하는 데 복잡할 수 있으며, 다른 항목을 삭제하는 경우 여러 개의 템플릿을 사용할 수 있습니다.
이 입력 내용:
<?xml version="1.0" encoding="UTF-8"?>
<mydocument>
<p>Here's text to keep</p>
<p><DropMe>Keep this text but not the element</DropMe>; and keep what follows.</p>
<p><DropMe>Also keep this text and <b>this child element</b> too</DropMe>, along with what follows.</p>
</mydocument>
를 생성합니다.
<?xml version="1.0" encoding="UTF-8"?><mydocument>
<p>Here's text to keep</p>
<p>Keep this text but not the element; and keep what follows.</p>
<p>Also keep this text and <b>this child element</b> too, along with what follows.</p>
</mydocument>
XSLT Cookbook의 크레딧입니다.
언급URL : https://stackoverflow.com/questions/321860/how-to-remove-elements-from-xml-using-xslt-with-stylesheet-and-xsltproc
'programing' 카테고리의 다른 글
트리거(ORA-39083, ORA-00942)와 관련된 Oracle IMPDP REMAP_SCHMA 문제에 대한 좋은 해결 방법이 있습니까? (0) | 2023.10.30 |
---|---|
익명 블록 안에 선택 결과 표시 (0) | 2023.10.30 |
봄맞이 보안에 개미 사냥꾼이 여럿 등장합니다. (0) | 2023.10.30 |
내용 편집 가능한 div의 새 줄에서 이벤트 트리거 (0) | 2023.10.30 |
열거형에서 사용하는 정수형을 변경하는 방법(C++)? (0) | 2023.10.30 |