2014-12-02 39 views
0

我使用XSLT 1.0我輸入的XML是如下XSL生成XML名稱值對

<?xml version="1.0" encoding="UTF-8"?> 
<Employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 
<FirstName>John</FirstName> 
<LastName>Peter</LastName> 
<Initial>T</Initial> 
<Spouse> 
<FirstName>Rita</FirstName> 
<LastName>Hudson</LastName> 
</Spouse> 
</Employee> 

我一個試圖寫一個XSL來產生下面的輸出...

<?xml version="1.0" encoding="UTF-8"?> 
<ArrayOfstringVariable xmlns="http://schemas.abc.org/2004/07/"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<stringVariable> 
<name>ServerName</name> 
<value>tmn.eu.com</value> 
</stringVariable> 
<stringVariable> 
<name>EmpFirstName</name> 
<value>John</value> 
</stringVariable> 
<stringVariable> 
<name>EmpLastName</name> 
<value>Peter</value> 
</stringVariable> 
<stringVariable> 
<name>SpouseFirstName</name> 
<value>Rita</value> 
</stringVariable> 
<stringVariable> 
<name>SpouseLastName</name> 
<value>Hudson</value> 
</stringVariable> 
</ArrayOfstringVariable> 

的輸出xml包含ArrayOfstringVariable stringVariable名稱值對.. 該名稱是硬編碼的,值來自輸入xml .. 名稱值「ServerName」是硬編碼的。

我XSL代碼嘗試以下,但它創造名稱值對與輸入XML的所有元素

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output method="xml" omit-xml-declaration="no" 
encoding="UTF-8" indent="yes" /> 
<xsl:template match="Employee"> 
<ArrayOfstringVariable> 
<xsl:apply-templates select="*"/> 
</ArrayOfstringVariable> 
</xsl:template> 
<xsl:template match="*"> 
<stringVariable> 
<name> 
<xsl:value-of select="local-name()"/> 
</name> 
<value> 
<xsl:value-of select="."/> 
</value> 
</stringVariable> 
</xsl:template> 
</xsl:stylesheet> 

誰能幫我寫XSL來產生上面的輸出?

在此先感謝

+1

你一定要試一下先..你會得到幫助糾正你的錯誤。 – 2014-12-02 09:24:31

+0

嗨Lingamurthy,我試過 但它複製源xml中的每個元素 – 2014-12-02 10:05:17

+0

將代碼添加爲註釋並沒有多大的可讀性。你可以編輯你的問題,雖然 – 2014-12-02 11:27:58

回答

0

的XSLT將是直線前進,因爲大多數的元素是硬編碼:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:ns="http://schemas.abc.org/2004/07/"> 
<xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" /> 
<xsl:strip-space elements="*"/> 
<xsl:template match="Employee"> 
    <ns:ArrayOfstringVariable> 
     <ns:stringVariable> 
      <ns:name>ServerName</ns:name> 
      <ns:value>tmn.eu.com</ns:value> 
     </ns:stringVariable> 
     <ns:stringVariable> 
      <ns:name>EmpFirstName</ns:name> 
      <ns:value> 
       <xsl:value-of select="FirstName"/> 
      </ns:value> 
     </ns:stringVariable> 
     <ns:stringVariable> 
      <ns:name>EmpLastName</ns:name> 
      <ns:value> 
       <xsl:value-of select="LastName"/> 
      </ns:value> 
     </ns:stringVariable> 
     <ns:stringVariable> 
      <ns:name>SpouseFirstName</ns:name> 
      <ns:value> 
       <xsl:value-of select="Spouse/FirstName"/> 
      </ns:value> 
     </ns:stringVariable> 
     <ns:stringVariable> 
      <ns:name>SpouseLastName</ns:name> 
      <ns:value> 
       <xsl:value-of select="Spouse/LastName"/> 
      </ns:value> 
     </ns:stringVariable> 
    </ns:ArrayOfstringVariable> 
</xsl:template> 
</xsl:stylesheet> 
+0

謝謝你非常。它的工作原理.. – 2014-12-02 18:35:04

+0

您能否通過選擇正確的答案來接受答案? – 2014-12-02 21:06:39

+0

抱歉,延遲。做.. – 2014-12-11 14:06:41