XSLT选择具有命名空间的节点

时间:2017-12-16 00:03:50

标签: xml xslt select

我试图使用xslt从xml获取少量标签的值。 我的list.xml:

<a>
 <na:Data xmlns:na="http://some_site.com#" Ref="http://another_site.com" 
  Key="value">
  <b>
    <c>some_c_attrib</c>
    <d>some_d_attrib</d>
    <e>some_e_attrib</e>
    <f>some_f_attrib</f>
    <g>some_g_attrib</g>
  </b>
  <h>
   <i>some_i_attrib</i>
   <j>some_j_attrib</j>
  </h>
 </na:Data>
 <da:Newtag xmlns:da="http://new_site.com">
   <k name="http://new_new_site.com"/>
 </da:Newtag>
</a>

我的list.xsl:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:my="http://some_site.com#"
    exclude-result-prefixes="my">
    <xsl:output method="html" encoding="UTF-8" />
    <xsl:template match="/">
        <html>
            <body>
                <xsl:for-each select="/a/my:Data/my:e">
                  <h1><xsl:value-of select="f" /></h1>
                </xsl:for-each>
            </body>
        </html> 
    </xsl:template>
</xsl:stylesheet>

我得到的输出是:

<html>
  <body>
    <h1/>
  </body>
</html>

我希望输出为:

<html>
  <body>
    <h1>some_f_attrib</h1>
  </body>
</html>

同样我也想获得c,d,e等的属性值。名称空间正在创建一些问题。没有命名空间,我可以访问属性值。我想我在选择语句的每个和每个值都出错了。

由于

1 个答案:

答案 0 :(得分:1)

有两个问题。

  1. 首先,f元素是b的孩子,而不是e
  2. 即使它是e的孩子,e元素也没有绑定到命名空间,并且您的XPath正在尝试解决my:e
  3. 将for-each中的XPath调整为:

    <xsl:for-each select="/a/my:Data/b">
      <h1><xsl:value-of select="f" /></h1>
    </xsl:for-each>