2012-10-10 2 views
1

신원 템플릿을 사용하여 특정 노드를 제외하고 XML-> XML을 변환하려고합니다.신원 XSLT 특정 필드 제외

그 노드는 문서의 다른 수준에있을 것이다 - 아래의 XML 예제 : 예를 들어

<root> 
. <item1> 
.  <contents> 
.   <fieldA/> 
.   ... 
.   <fieldZ/> 
.  </contents> 
. </item1> 
. <item2> 
.  <field1/> 
.  ... 
.  <field9/> 
. </item2> 
</root> 

, 나는 "루트/항목 1/내용"에서 "fieldC" 와 "FIELD2을 포함하는 단지 싶습니다 "from"root/item2 ".

내 XSLT가 아래에 있습니다. 그것은 작동하지 않는다, 내가 포함하고 싶은 분야의 부모 요소를 포함하지 않기 때문에 나는 생각한다? 하지만 어떻게 할 수 있는지 잘 모르겠습니다 ...

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
<xsl:output method="xml" indent="yes" /> 
. <xsl:strip-space elements="*"/> 
. <xsl:template match="@* | node()"> 
.  <xsl:copy> 
.   <xsl:apply-templates select="@* | node()" /> 
.  </xsl:copy> 
. </xsl:template> 
.  
. <xsl:template match="fieldC|field2"> 
.  <xsl:element name="{name()}"> 
.   <xsl:value-of select="text()" /> 
.  </xsl:element> 
. </xsl:template> 
</xsl:stylesheet> 

누구든지 도움을받을 수 있다면 감사하겠습니다.

감사합니다.

답변

1

사용 :이 변환은 (제공된 스케치에서 파생 된) 다음과 같은 XML 문서에 적용

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match= 
"item1/contents/*[not(self::fieldC)] | item2/*[not(self::field2)]"/> 
</xsl:stylesheet> 

:

<root> 
    . <item1> 
    .  <contents> 
    .   <fieldA/> 
    .   <fieldB/> 
    .   <fieldC/> 
    .   ... 
    .   <fieldZ/> 
    .  </contents> 
    . </item1> 
    . <item2> 
    .  <field1/> 
    .  <field2/> 
    .  ... 
    .  <field9/> 
    . </item2> 
</root> 

원하는, 올바른 결과합니다 (삭제 된 특정 요소) :

<root> 
    . <item1> 
    .  <contents> 
    .   
    .   
    .   <fieldC/> 
    .   ... 
    .   
    .  </contents> 
    . </item1> 
    . <item2> 
    .  
    .  <field2/> 
    .  ... 
    .  
    . </item2> 
</root> 
+0

죄송합니다. 제목은 아마 오해의 원인이되었을 것입니다. 나는 다른 모든 노드를 같은 레벨에서 제외하려고했지만 "fieldC"또는 "field2"는 제외하고자했습니다. 이 솔루션은이 두 필드를 제외하고 내가 원하는 것과 반대되는 나머지 부분을 남기는 것으로 보입니다. – Zyga

+0

@Zyga - 그러면 문제의 완전한 정의가 아닙니다. 질문을 수정하고 정확한 결과를 제공해야합니다. 여러분이 그것에있는 동안 줄임표를 제거하고 완전히 구체적인 소스 XML 문서를 제공해주십시오. –

+0

@Zyga, 내 업데이트보기 - 나는 당신이 말한 것을 추측 할 수 * 있습니다. –