1
私はplayers
とcitizens
というセクションでこのXMLを持っています。各セクションには複数のperson
タグがあります。XSLT 1.0で類似のタグをグループ化するXSLT変換
<?xml version="1.0" encoding="UTF-8"?>
<test>
<players>
<person>
<name>joe</name>
<age>20</age>
</person>
<person>
<name>sam</name>
<age>23</age>
</person>
</players>
<citizens>
<person>
<name>joe</name>
<city>ny</city>
</person>
<person>
<name>sam</name>
<city>london</city>
</person>
</citizens>
</test>
は今、私はplayers
とcitizens
セクションのperson
タグはname
タグに基づいてマージされるように、これを変換したいです。
これは私が必要とする出力です。
<?xml version="1.0" encoding="UTF-8"?>
<test>
<players>
<person>
<name>joe</name>
<age>20</age>
<city>ny</city>
</person>
<person>
<name>sam</name>
<age>23</age>
<city>london</city>
</person>
</players>
</test>
私はこのためにXSLT 1.0
変換を行いたいと思います。
私はこれを試しました。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="citizens" select="/test/citizens"/>
<xsl:template match="/test/players">
<players>
<xsl:apply-templates select="person"/>
</players>
</xsl:template>
<xsl:template match="person">
<xsl:variable name="data1" select="."/>
<xsl:variable name="data2" select="/test/citizens/person[name=current()/name]/."/>
<person>
<xsl:copy-of select="$data1/*"/>
<xsl:for-each select="$data2/*">
<xsl:variable name="element2" select="name(.)"/>
<xsl:if test="count($data1/*[name()=$element2])=0">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</person>
</xsl:template>
</xsl:stylesheet>
ほぼ正しいです。私はちょうど最後の2 person
タグを取り除きたいです。私を案内してください。
<players>
<person>
<name>joe</name>
<age>20</age>
<city>ny</city>
</person>
<person>
<name>sam</name>
<age>23</age>
<city>london</city>
</person>
</players>
<person>
<name>joe</name>
<city>ny</city>
</person>
<person>
<name>sam</name>
<city>london</city>
</person>
注:私はanswer for XSLT 2.0を受け、しかし、今、私はXSLT 1.0で解決策を探しています。 XSLT 1.0でこれを行うには