【问题标题】:XSLT select nodes with namespaceXSLT 选择具有命名空间的节点
【发布时间】:2018-05-30 04:39:10
【问题描述】:

我正在尝试使用 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 等的属性值。命名空间产生了一些问题。没有命名空间,我可以访问属性值。我想我在 for-each 和 value-of select 语句中出错了。

谢谢

【问题讨论】:

  • 我的从何而来?命名空间前缀应该是 na?在 xslt 的根目录中尝试。
  • xsl 文件中的 'my' 就像一个别名。我猜它可以是任何名称,不必与 xml 文件中的相同。

标签: xml xslt select


【解决方案1】:

有两个问题。

  1. 首先,f 元素是b 的子元素,而不是e
  2. 即使它是e 的子元素,e 元素也不会绑定到命名空间,并且您的 XPath 正在尝试寻址 my:e

将 for-each 中的 XPath 调整为:

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

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多