2014-12-02 49 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