我想显示所有节点及其值,除了其中两个。例如,显示除' 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>
答案 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