输入xml ist的一部分
<root>
<page>1</page>
<embedded>
<items>
<_links>
<href>abc</href>
</_links>
<parent>null</parent>
<enabled>true</enabled>
<values>
<data1>
<locale>DE</locale>
<scope>null</scope>
<data>abc</data>
</data1>
<data3>
<locale>null</locale>
<scope>null</scope>
<data>producta</data>
<links>
<download>
</download>
</links>
</data3>
<data4>
<locale>null</locale>
<scope>null</scope>
<data>productc</data>
</data4>
</values>
</items>
</embedded>
</root>
首先,我将数据的元素内容保存在变量中(这对于XSLT代码中的其他步骤很重要。)
<xsl:variable name="content" select="root/embedded/items[position()=$+1]/values/*/data"/>
我想测试所有数据。 我寻找一种方法来写条件,使我恰好将数据元素的内容(例如“ producta”)保存在变量中。 该条件应查看locale元素(之前的兄弟姐妹)是否具有内容“ null”,并且当此条件为true时,请复制parent元素和data元素。
输出应类似于
<data3>
<data>producta</data>
</data3>
<data4>
<data>productc</data>
</data4>
谢谢!
答案 0 :(得分:0)
如果items[position()=$+1]
是一个错字,我(暂时)将其假定为items[position()=1]
然后可以在XSLT 1.0中实现预期的结果,如下所示:
<xsl:stylesheet xmlns:xalan="http://xml.apache.org/xalan"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" indent="yes" />
<xsl:variable name="content"
select="/root/embedded/items[position()=1]/values/*/data" />
<xsl:template match="/">
<xsl:for-each select="$content[preceding-sibling::locale[.= 'null']]">
<xsl:element name="{name(..)}">
<xsl:copy-of select="." />
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>