2012-04-03 107 views
2

我有一個使用xslt 1格式的名稱/值對組成的XML文件,其中每個「名稱」是具有內容中的值的元素名稱。這裏有一個例子:使用XSLT將名稱/值對XML轉換爲元素

輸入:

<Root> 
    <Entities> 
    <Entity EntityName="Client"> 
     <Data Name="ADDR_City">Anytown</Data> 
     <Data Name="ADDR_State">SC</Data> 
     <Data Name="ADDR_Zip">23904</Data> 
    </Entity> 
    </Entities> 
</Root> 

輸出:

<Root> 
    <Entities> 
    <Client> 
     <ADDR_City>Anytown</ADDR_City> 
     <ADDR_State>SC</ADDR_State> 
     <ADDR_Zip>23904</ADDR_Zip> 
    </Client> 
    </Entities> 
</Root> 

客戶端的實體名稱並不一定是唯一的,這將工作的方式......我主要關心的是獲得數據名稱=「...字段轉換成正確的格式。感謝您的幫助!

回答

1

編輯:道歉 - 我錯過了t他Entity的名字。假設基數很多<Entity> per <Entities>更新。我想我還需要指出,如果屬性EntityName或Name具有無效的元素字符(例如空格),或者屬性完全丟失,則這將失敗。

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/Root"> 
    <Root> 
     <xsl:for-each select="Entities"> 
     <Entities> 
      <xsl:for-each select="Entity"> 
      <xsl:element name="{@EntityName}"> 
       <xsl:for-each select="Data"> 
       <xsl:element name="{@Name}"> 
        <xsl:value-of select="./text()"/> 
       </xsl:element> 
       </xsl:for-each> 
      </xsl:element> 
      </xsl:for-each> 
     </Entities> 
     </xsl:for-each> 
    </Root> 
    </xsl:template> 
</xsl:stylesheet> 
+0

該工程除我有多個實體的標籤和該僅輸出具有其下一個數據元素中的第一個(幾個是空白的)。如何將其更改爲輸出所有? – user887057 2012-04-03 18:10:13

2
<xsl:for-each select="Data"> 
    <xsl:element Name="{@Name}"><xsl:value-of select="." /></xsl:element> 
</xsl:for-each> 
+1

小寫「N」:'的' – MiMo 2012-04-03 16:16:33