应用模板到具有与属性
子节点我想模板应用到具有特定属性的子节点,我很好奇,如果有可能有<template match=...
应用模板到具有与属性
所以,如果我有一个输入XML
<?xml version="1.0"?> <parent-node>
<child-node>
<label>value1</label>
<name>name1</name>
<desc src="anything">description1</desc>
</child-node>
<child-node>
<label>value2</label>
<desc>description2</desc>
</child-node>
<some-node>
<name>name3</name>
<desc src="something">description3</desc>
</some-node>
</parent-node>
所需模板将被应用于具有desc
儿童定义src
属性,例如,节点。第一个和最后一个节点:
<child-node> <label>value1</label>
<name>name1</name>
<desc src="anything">description1</desc>
</child-node>
<some-node>
<name>name3</name>
<desc src="something">description3</desc>
</some-node>
尽我至今是一个模板匹配有desc
孩子节点,其余的(测试是否有任何desc
节点有@src
)是模板里面,一个xsl:choose
条款:
<xsl:template match="*[desc]"> <xsl:choose>
<xsl:when test="desc[@src]">
<xsl:element name="node-with-src">
[...]
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="node">
[...]
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
通过具有这样的模板,我可以离开,但该模板里面的otherwise
一部分,无论如何,这将是一个要好很多。
预先感谢您的每一个答案!
编辑 我更喜欢1.0解决方案,但它不是一个标准。
回答:
允许使用更复杂的(嵌套的)谓词。使用此:
<xsl:template match="*[desc[@src]]">
而且对于节点相应的模板没有src
属性:
<xsl:template match="*[desc[not(@src)]]">
例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="*[desc[@src]]">
<xsl:element name="node-with-src"/>
</xsl:template>
<xsl:template match="*[desc[not(@src)]]">
<xsl:element name="node"/>
</xsl:template>
</xsl:stylesheet>
适用于:
<parent-node> <child-node>
<label>value1</label>
<name>name1</name>
<desc src="anything">description1</desc>
</child-node>
<child-node>
<label>value2</label>
<desc>description2</desc>
</child-node>
<some-node>
<name>name3</name>
<desc src="something">description3</desc>
</some-node>
</parent-node>
输出:
<node-with-src/> <node/>
<node-with-src/>
以上是 应用模板到具有与属性 的全部内容, 来源链接: utcz.com/qa/265452.html