2016-08-31 6 views
0

私は(非常に)XSLTを初めて使い、ノードが定義されている名前空間に応じて、XML文書内の特定のノードをXSLTでフィルタリングする方法を誰かに見せてくれることを願っていました。簡単な例:特定の名前空間内のXSLTフィルタノード

Input: 

<root 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="xxx:yyy:datamodel:SW:ABCD:01 AB_01.xsd" 
    xmlns="xxx:yyy:datamodel:SW:ABCD:01"> 

    <Document xmlns="ABCD:ZYX:01"> 
     <TypeCode>SEC</TypeCode> 
    </Document> 
    <Document xmlns="ABCD:NOP:01"> 
     <TypeCode>DEC</TypeCode> 
    </Document> 
</root> 

出力:

SEC

だから私は唯一の名前空間ABCDに文書ノードを解析する:ZYX:01。

これは、これまでのところ、私のXSLTです:事前に

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:sec="xxx:yyy:datamodel:ABCD:ZYX:01" 
    version="1.0"> 
    <xsl:template match="sec:TypeCode"> 
     <xsl:for-each select="//*[local-name() = 'TypeCode']"> 
      <xsl:value-of select="." /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

ありがとう!

答えて

1

あなたのXSLTでは "xxx:yyy:datamodel:ABCD:ZYX:01"という名前空間を定義していますが、XMLでは、必要なTypeCodeは "ABCD:ZYX:01"そのため、XSLTのテンプレートマッチは実際には一致しません。

あなたは、おそらくこのような何かをしたい...名前空間の

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
       xmlns:sec="ABCD:ZYX:01"> 
    <xsl:output method="text" /> 

    <xsl:template match="/"> 
     <xsl:for-each select="//sec:TypeCode"> 
      <xsl:value-of select="." /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
+0

ニースの提案、プラスワン。 –

+0

これは非常に助けてくれてありがとう! – gajus

関連する問題