【问题标题】:How to retrieve the child element of a tag with xslt如何使用 xslt 检索标签的子元素
【发布时间】:2019-04-03 13:08:50
【问题描述】:

我只想从我的带有 xslt 的 xml 文件中检索 <b><a> 子级,无论它上面是什么

但是,我得到了 xml 中的所有元素(而不仅仅是我感兴趣的元素)。 例如,如果我有:

<x> 
   <z>
      <b>
         <a>my element </a>
      </b>
  </z>
</x>

或者只是:

<x> 
    <b>
       <a>my element </a>
    </b>
</x>

我想恢复:我的元素

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">



        <xsl:output method="text"/>
           <xsl:template match="x">
                <xsl:for-each select="b/a">
                     <xsl:value-of select="w" /> 
                </xsl:for-each>
          </xsl:template>

 </xsl:stylesheet>

【问题讨论】:

  • 它是

标签: xml xslt


【解决方案1】:

我只想从我的 xml 中检索 &lt;b&gt;&lt;a&gt; 子项 带有 xslt 的文件,无论上面是什么

你很亲密。使用:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="text"/>
    <xsl:template match="text()"/>
    <xsl:template match="b/a">
        <xsl:value-of select="." /> 
    </xsl:template>
</xsl:stylesheet>

注意:用空模板覆盖文本节点的内置规则(无输出)。只需使用完全匹配的规则输出您想要的内容。

但是,我得到了我的 xml 中的所有元素

那句话很奇怪,因为你使用的是text 输出方法...

【讨论】:

    【解决方案2】:

    奇怪的是,你事先不知道输入 XML 的结构。无论如何:

    <xsl:template match="/">
        <xsl:value-of select="//a" /> 
    </xsl:template>
    

    将检索a 元素的值,无论它位于输入XML 文档的层次结构中的什么位置。

    要将其限制为 a 元素,它是 b 的子元素,请使用:

    <xsl:value-of select="//b/a" /> 
    

    【讨论】:

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