我正在编写一个XSL转换.我想编写一个模板,该模板匹配文档的所有子元素,除了一个特定节点.我的xml看起来像这样 -
<Document>
<NodeA></NodeA>
<NodeB></NodeB>
<ServiceNode></ServiceNode>
<NodeX></NodeX>
</Document>
Run Code Online (Sandbox Code Playgroud)
我想写一个匹配除所有节点模板ServiceNode即NodeA到NodeX.如何编写这个Xpath来获取 -
<xsl:template match="ALL Nodex Except ServiceNode">
Run Code Online (Sandbox Code Playgroud)
Dim*_*hev 29
我想编写一个模板,匹配除ServiceNode之外的所有节点,即NodeA到NodeX.
如果"node"表示元素,则使用:
<xsl:template match="*[not(self::ServiceNode)]">
Run Code Online (Sandbox Code Playgroud)
如果"节点"是指任何节点(类型为元素,文本,注释,处理指令):使用
<xsl:template match="node()[not(self::ServiceNode)]">
Run Code Online (Sandbox Code Playgroud)
如果您只想Document匹配的孩子使用:
<xsl:template match="Document/node()[not(self::ServiceNode)]">
Run Code Online (Sandbox Code Playgroud)
如果您只想匹配top元素的子元素,请使用:
<xsl:template match="/*/node()[not(self::ServiceNode)]">
Run Code Online (Sandbox Code Playgroud)
你最好使用这个表达式:
*[not(self::ServiceNode)]
Run Code Online (Sandbox Code Playgroud)
包含在 XSLT 中:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:apply-templates select="*[not(self::ServiceNode)]"/>
</xsl:template>
<xsl:template match="*">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
使用此 XML 示例:
<Document>
<NodeA>1</NodeA>
<NodeB>2</NodeB>
<ServiceNode>3</ServiceNode>
<NodeX>4</NodeX>
</Document>
Run Code Online (Sandbox Code Playgroud)
它将给出正确的结果:
1
2
4
Run Code Online (Sandbox Code Playgroud)
<xsl:template match="Document/*[name() != 'ServiceNode']">
Run Code Online (Sandbox Code Playgroud)
(或者local-name()如果您必须处理名称空间)