应用模板到具有与属性

子节点我想模板应用到具有特定属性的子节点,我很好奇,如果有可能有<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

回到顶部