Я хотел бы применить шаблон к узлам, у которых есть дочерние элементы с указанным атрибутом, и мне любопытно, возможно ли это с <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, но это не критерий.