我知道这种转变是微不足道的。但不幸的是,我被卡住了。 我的输入如下:
<?xml version="1.0" encoding="UTF-8"?>
<tests>
<test>Biography</test>
<test>Job</test>
<test>Salary</test>
<test>FirtsName</test>
<test>John</test>
<test>Mary</test>
<test>David</test>
<test>Isabella</test>
<test>SecondName</test>
<test>Jones</test>
<test>Williams</test>
<test>Biography</test>
<test>Job</test>
<test>Salary</test>
<test>FirtsName</test>
<test>Paul</test>
<test>Peter</test>
<test>SecondName</test>
<test>Castro</test>
<test>Ricci</test>
<tests>
我要使用xslt 2.0做的是选择值为“ FirstName”的元素“ test”和值为“ SecondName”的元素“ test”之间的所有元素,并将它们复制为它们的子元素前一个“测试”元素,其值为“传记”。 输出应如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<tests>
<test>Biography
<test>John</test>
<test>Mary</test>
<test>David</test>
<test>Isabella</test>
</test>
<test>Job</test>
<test>Salary</test>
<test>FirtsName</test>
<test>SecondName</test>
<test>Jones</test>
<test>Williams</test>
<test>Biography
<test>Paul</test>
<test>Peter</test>
</test>
<test>Job</test>
<test>Salary</test>
<test>FirtsName</test>
<test>SecondName</test>
<test>Castro</test>
<test>Ricci</test>
</tests>
非常感谢您的帮助:)
答案 0 :(得分:0)
看看是否有帮助:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/tests">
<xsl:copy>
<xsl:for-each-group select="test" group-starting-with="test[.='Biography']">
<xsl:variable name="names" select="current-group()[. >> current-group()[.='FirtsName'] and . << current-group()[.='SecondName']]" />
<test>
<xsl:value-of select="current-group()[1]"/>
<xsl:text> </xsl:text>
<xsl:copy-of select="$names"/>
</test>
<xsl:copy-of select="current-group()[position() gt 1] except $names" />
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>