【问题标题】:I want to pick all sub-tag's values excping only one or more tag我想选择所有子标签的值,除了一个或多个标签
【发布时间】:2016-01-30 19:16:54
【问题描述】:

我有以下 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" 代码将是什么?

【问题讨论】:

标签: xml xslt xslt-1.0


【解决方案1】:

首先,您应该知道现有 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2017-02-21
    • 2020-01-05
    • 1970-01-01
    • 2012-01-18
    • 2010-10-17
    相关资源
    最近更新 更多