3
我是XSLT的新手,我試圖實現相當簡單的重構。我有一個代表一個人的xml文檔(出於說明目的)。我有許多元素。從這些我想提取first_name
和last_name
(和關鍵的其他)到一個新的full_name
元素。我見過這個問題here。 「renameWrapped」方法起作用。但是它不夠通用,因爲我無法保證輸入文檔中元素的排序。使用XSLT進行簡單XML重構
我有下面的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>
我做錯了什麼?
在此先感謝您的幫助。
嗨,你已經發布第二個代碼片段正是我需要的。第一個也適用。非常感謝。一旦我的聲望允許,我會記得投票。 – 2013-02-21 10:36:31