2013-12-20 2 views
0

여기 내 변환을위한 XSL입니다. XSL : 일치하는 템플릿이 작동하지 않습니다.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 
<xsl:strip-space elements="*" /> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="EL3"> 
    <te>ABC</te> 
</xsl:template> 

내가 변환하고 싶은 소스 - XML이다.

<EL1 xmlns="http://anyurl.com" language="2"> 
<EL2> 
    <set1> 
     <value1>12</value1> 
     <value2>34</value2> 
     <value3>45</value3>   
    </set1> 
</EL2> 
<EL2> 
    <set1> 
     <value1>AB</value1> 
     <value2>CD</value2> 
     <value3>EF</value3> 
     <EL3> 
      <value1>AB</value1> 
      <value2>CD</value2> 
      <value3>EF</value3> 
     </EL3> 
    </set1> 
</EL2> 

는 변환 후 대상-XML이다.
<EL1 xmlns="http://anyurl.com" language="2"> 
<EL2> 
    <set1> 
     <value1>12</value1> 
     <value2>34</value2> 
     <value3>45</value3>   
    </set1> 
</EL2> 
<EL2> 
    <set1> 
     <value1>AB</value1> 
     <value2>CD</value2> 
     <value3>EF</value3> 
     <EL3> 
      <value1>AB</value1> 
      <value2>CD</value2> 
      <value3>EF</value3> 
     </EL3> 
    </set1> 
</EL2> 

매칭

네임 스페이스의 관계에서 작동하지 않습니다. Source-XML에서 xmlns = "http://anyurl.com"을 지우면 원하는 결과를 얻습니다. 문제는 외부 시스템에서 Source-XML을 가져와 이전에 Source-XML을 변경할 수 없다는 것입니다. 이런 결과를 기다리고있는 XSL을 어떻게 편집 할 수 있습니까?

색슨 (9)와 같은 XSLT 2.0 프로세서를 가정
<EL1 language="2"> 
    <EL2> 
     <set1> 
     <value1>12</value1> 
     <value2>34</value2> 
     <value3>45</value3> 
     </set1> 
    </EL2> 
    <EL2> 
     <set1> 
     <value1>AB</value1> 
     <value2>CD</value2> 
     <value3>EF</value3> 
     <te>ABC</te> 
     </set1> 
    </EL2> 
</EL1> 

답변

0

또는 당신이 XSLT 1.0 프로세서를 사용하는 경우에만

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://anyurl.com"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 
<xsl:strip-space elements="*" /> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="EL3"> 
    <te>ABC</te> 
</xsl:template> 

필요 XmlPrime 당신이 필요로하는

일치를 위해 무엇을해야
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:df="http://anyurl.com" exclude-result-prefixes="df"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 
<xsl:strip-space elements="*" /> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="df:EL3"> 
    <te>ABC</te> 
</xsl:template> 

, 그러나 Carlos는 또 다른 문제를 해결했습니다. 즉, 올바른 네임 스페이스에 새로운 요소를 작성했기 때문에 필요합니다.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://anyurl.com" xmlns="http://anyurl.com"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 
<xsl:strip-space elements="*" /> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="EL3"> 
    <te>ABC</te> 
</xsl:template> 

은 각각

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:df="http://anyurl.com" exclude-result-prefixes="df" xmlns="http://anyurl.com"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 
<xsl:strip-space elements="*" /> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="df:EL3"> 
    <te>ABC</te> 
</xsl:template> 
+0

많은 감사합니다. 이것은 나를 위해 작동하고 내 문제가 해결되었습니다. 완전한! – user3123034

관련 문제