我想选择所有子标签的值,只包括一个或多个标签



我有以下xml:

    <?xml version="1.0" encoding="UTF-8"?>
<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
</catalog>

传递此查询的XSLT是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
        <xsl:value-of select="catalog/cd"/> 
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

我已经写了上面的xslt代码,它选择所有子标记的所有值。上述代码的答案是:

帝国滑稽鲍勃·迪伦美国哥伦比亚10.90 1985

问题:我想选择除一个子标签外的所有子标签,假设我不想要子标签"价格"中的值。即,我期待以下答案

帝国滑稽鲍勃·迪伦美国哥伦比亚1985

这个答案的"xslt 1.0"代码是什么?

首先,您应该知道现有XSLT的实际输出是:

<html>
   <body>
           Empire Burlesque
              Bob Dylan
              USA
              Columbia
              10.90
              1985
   </body>
</html>

您展示的是浏览器如何渲染到屏幕上(将所有空白字符序列折叠到一个空格中)。

要从结果中排除价格,您必须使样式表更深入一层,并提供自己的分隔符。

替换:

 <xsl:value-of select="catalog/cd"/> 

带有:

<xsl:for-each select="catalog/cd/*[not(self::price)]">
    <xsl:value-of select="."/>
    <xsl:text> </xsl:text>
</xsl:for-each>

这里的结果是:

<html>
   <body>Empire Burlesque Bob Dylan USA Columbia 1985 </body>
</html>

浏览器将其渲染为:

Empire Burlesque Bob Dylan USA Columbia 1985

相关内容

  • 没有找到相关文章

最新更新