Я хочу изменить существующий файл XML с помощью XSLT. Исходный XML-файл
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<object>
<items>
<item>
<name>John Doe</name> <!-- Changed tag to closing tag -->
<public-url>http://www.johndoe.com</public-url>
</item>
</items>
<records>
<record>
<person>
<field name="book">
<text>A book</text>
<links>
<link>http://www.acook.com</link>
</links>
</field>
</person>
</record>
</records>
</object>
</entry>
Теперь я хочу использовать XSL, чтобы получить информацию о пользователе от <item>
и вставить новый узел <field>
в <person>
. Окончательный результат будет выглядеть следующим образом.
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<object>
<items>
<item>
<name>John Doe<name>
<public-url>http://www.johndoe.com</public-url>
</item>
</items>
<records>
<record>
<person>
<field name="author">
<text>John Doe</text>
<links>
<link>http://www.johndoe.com</link>
</links>
</field>
<field name="book">
<text>A book</text>
<links>
<link>http://www.acook.com</link>
</links>
</field>
</person>
</record>
</records>
</object>
</entry>
Ниже моя попытка, я хочу получить значения <name>
и <public-url>
из <item>
и стать двумя переменными. Создайте новый <field>
, используя эти две переменные, и вставьте в <record>
. В настоящее время я не могу найти способ вставить этот новый узел в правильное местоположение.
<?xml version="1.0" encoding="UTF-8"?>
<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="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item/">
<xsl:variable name="username" select="@name" />
<xsl:variable name="userurl" select="@public-url" />
<xsl:copy-of select="."/>
<field name="author">
<text><xsl:value-of select="$username"/></text>
<links>
<link>
<xsl:value-of select="$userurl" />
</link>
</links>
</field>
</xsl:template>
</xsl:stylesheet>
Пожалуйста, советы, спасибо!