Учитывая этот XML (упрощенный от реального содержания):XPATH Выберите детей родителя которого родственный соответствует условию
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://foo.com">
<name>Project Name</name>
<namespace>
<name>ROOT</name>
<namespace>
<name>A</name>
<namespace>
<name>AA</name>
<subject>
<name>SUBJECT</name>
</subject>
<item>
<name>ITEM_AA1</name>
</item>
</namespace>
</namespace>
<namespace>
<name>B</name>
<namespace>
<name>BB</name>
<subject>
<name>SUBJECT</name>
</subject>
<item>
<name>ITEM_BB1</name>
</item>
<item>
<name>ITEM_BB2</name>
</item>
</namespace>
</namespace>
</namespace>
</project>
Я пытаюсь создать таблицу стилей для преобразования текстовых узлов, таких как ITEM_BB1
и ITEM_BB2
- т.е. item/name/text()
узлы, которые являются дочерними элементами namespace
с дочерним элементом name
, который имеет текстовое содержимое B
.
У меня возникли проблемы с выяснением того, как создать шаблон, который правильно соответствует этим узлам.
Я попытался построить выражение с ../
и с осью следующего брата, но я не получаю его. Вот моя таблица стилей WIP:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://foo.com"
exclude-result-prefixes="x"
version="1.0" >
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="node()|@*">
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:template>
<!-- THIS OPERATES ON THE RIGHT ITEMS AT LEAST, BUT OUT OF CONTEXT -->
<!--
<xsl:template match="x:namespace/x:name[text()='B']">
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
<xsl:for-each select="..//x:item/x:name/text()">
<hello><xsl:value-of select="."/></hello>
</xsl:for-each>
</xsl:template>
-->
<!-- THIS IS INVALID -->
<xsl:template match="x:namespace/x:name[text()='B']/..//x:item/x:name/">
<hello><xsl:value-of select="."/></hello>
</xsl:template>
</xsl:stylesheet>
Мой вопрос в том, как сделать шаблон подходящим для целевых узлов?
Да, который работает для моего образца XML, Благодарю. Удручающе простое изменение того, что я пытался! – sudocode