У меня есть источник XML, подобный этому:
<?xml version="1.0" encoding="utf-8"?>
<records>
<record>
<employee>
<firstname>Tom</firstname>
<lastname>Hanks</lastname>
</employee>
<boss firstname="Sylvester" lastname="Stallone">Sylvester</boss>
</record>
<record>
<employee>
<firstname>Tom</firstname>
<lastname>Hanks</lastname>
</employee>
<boss firstname="Johnny" lastname="Depp">Johnny</boss>
</record>
<record>
<employee>
<firstname>Johnny</firstname>
<lastname>Depp</lastname>
</employee>
<boss firstname="Robin" lastname="Williams">Robin</boss>
</record>
</records>
И я хочу объединить все имена в один отдельный список, чтобы иметь возможность напечатать что-то вроде этого:
<root>
<firstname>Tom</firstname>
<firstname>Sylvester</firstname>
<firstname>Johnny</firstname>
<firstname>Robin</firstname>
</root>
Я провел несколько тестов и наконец смог объединить все в одну строку, используя этот XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
<root>
<xsl:variable name="all_Users" select="records/record/employee/firstname" />
<xsl:variable name="all_Values" select="records/record/boss" />
<xsl:variable name="all_first_names" >
<xsl:copy-of select="$all_Users"/>
<xsl:copy-of select="$all_Values"/>
</xsl:variable>
<xsl:for-each select="$all_first_names">
<firstname><xsl:value-of select="." /></firstname>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
Вот мой результат:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<firstname>TomTomJohnnySylvesterJohnnyRobin</firstname>
</root>
Есть ли способ слияния последовательности $all_Users
и $all_Values
в одну последовательность, а не строку?
Большое спасибо заранее.