我是 XSLT 的新手,我正在尝试实现相当简单的重组。我有一个代表一个人的 xml 文档(用于说明目的)。我在person下有很多元素。我想从这些中提取first_name
and last_name
(以及至关重要的其他)到一个新full_name
元素中。我在这里看到了这个问题。“renameWrapped”方法有效。但是它不够通用,因为我不能保证输入文档中元素的顺序。
我有以下 XML:
<?xml version="1.0" encoding="utf-8"?>
<myname:Person xmlns:myname="http://www.myname.co.uk/def">
<myname:attr1>some value</myname:attr1>
<myname:first_name>john</myname:first_name>
<myname:last_name>smith</myname:last_name>
<myname:attr2>some value</myname:attr2>
<!-- other person stuff -->
</myname:Person>
这由以下 xsl 转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:myname="http://www.myname.co.uk/def">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="myname:Person">
<myname:Person>
<xsl:copy>
<xsl:apply-templates select="@*|node()[local-name() != 'first_name' and local-name() != 'Person' and local-name() != 'last_name']"/>
</xsl:copy>
<myname:FullName>
<xsl:apply-templates select="myname:first_name | myname:last_name"/>
</myname:FullName>
</myname:Person>
</xsl:template>
</xsl:stylesheet>
然而,这给了我以下myname:Person
被复制的输出:
<?xml version="1.0" encoding="UTF-8"?>
<myname:Person xmlns:myname="http://www.myname.co.uk/def">
<myname:Person>
<myname:attr1>some value</myname:attr1>
<myname:attr2>some value</myname:attr2>
</myname:Person>
<myname:FullName>
<myname:first_name>john</myname:first_name>
<myname:last_name>smith</myname:last_name>
</myname:FullName>
</myname:Person>
我究竟做错了什么?
在此先感谢您的帮助。