使用xslt显示除两个节点之外的所有节点

时间:2014-11-15 20:12:40

标签: xml xslt

我想显示所有节点及其值,除了其中两个。例如,显示除' type'之外的所有内容。和'价格'

<xsl:for-each select="market/device">
<!-- ... --> 
  <xsl:for-each select="*[local-name()!='type']"> <!-- <<< here --> 
    <li><xsl:value-of select="local-name()"/></li>
    <li><xsl:value-of select="."/></li>
  </xsl:for-each>
<!-- ... -->
</xsl:for-each>

1 个答案:

答案 0 :(得分:1)

由于您没有提供输入,我只是设置以下XML作为示例:

输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<markets>
   <market>
     <device>
        <type>type value</type>
        <price>price value</price>
        <nottype>nottype value</nottype>
        <notprice>notprice value</notprice> 
        <else>else value</else>
    </device>
   </market> 
 </markets>

应用以下XSLT时:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-public="XSLT-compat" 
     omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
  <hmtl>
    <head>

    </head>
    <xsl:apply-templates/>
  </hmtl>
</xsl:template>
<xsl:template match="markets">
<ul>
 <xsl:for-each select="market/device">
   <xsl:for-each select="*[not((local-name() = 'type') or (local-name() = 'price'))]">
     <li><xsl:value-of select="local-name()"/></li>
     <li><xsl:value-of select="."/></li>
   </xsl:for-each>
</xsl:for-each> 
</ul>
</xsl:template>
</xsl:transform>

产生以下输出(发布相关部分):

<ul>
  <li>nottype</li>
  <li>nottype value</li>
  <li>notprice</li>
  <li>notprice value</li>
  <li>else</li>
  <li>else value</li>
</ul>

供参考:https://developer.mozilla.org/en-US/docs/Web/XPath/Functions/not