У меня есть следующий XML:
<root>
<book>
<element2 location="file.txt"/>
<element3>
<element3child/>
</element3>
</book>
<book>
<element2 location="difffile.txt"/>
</book>
</root>
Мне нужно иметь возможность копировать все, но проверьте, не находимся ли мы в / root / book / element2 [@ location = 'whatfile']. Если мы здесь, нам нужно проверить, существует ли родственный элемент3, если его нет, мы добавляем <element3>
. С другой стороны, если он уже существует, нам нужно перейти к его дочерним элементам, найти last()
и добавить собственный элемент, скажем <element3child>
.
До сих пор я придумал следующее. Но имейте в виду, что я новичок в XSLT и мне нужна помощь с синтаксисом и т. Д.
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root/book/element2[@location='file.txt']/../*/last()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<element3child/>
</xsl:template>