2011-04-07 96 views
0

嗨,需要使用XSLT转换将输入XML转换为输出XML

我正在寻找使用XSLT将输入XML转换为OUTput XML。

输入XML是如下

<ALLFields id="0001"> 
    <field name="ComputerName">ABC</field> 
    <field name="ComputerType">Windows</field> 
    <field name="DatabaseName" /> 
    <field name="CPULevel">10</field> 
</ALLFields> 

输出XML我需要的是

<entry id="0001"> 
<ComputerName>ABC</ComputerName> 
<ComputerType>Windows</ComputerType> 
<DatabaseName /> 
<CPULevel>10</CPULevel> 
</entry> 
+0

您可以设置您的问题的格式,以便可以读取XML模式并提供您已尝试的内容 – detaylor 2011-04-07 11:57:59

回答

0
<xsl:template match="AllFields"> 
    <entry id="{@id}"> 
     <xsl:for-each select="field"> 
      <xsl:element name="{@name}"> 
       <xsl:value-of select="text()"/> 
      </xsl:element> 
     </xsl:for-each> 
    </entry> 
</xsl:template> 

虽然没有测试。

+0

在提供的源XML文档中没有名为'entry“的元素。 – 2011-04-07 13:10:39

+0

这是' ...'所以我选择了'entry'。谢谢,更新。 – khachik 2011-04-07 13:50:21

3

该转化

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="ALLFields"> 
    <entry id="{@id}"> 
     <xsl:apply-templates select="node()"/> 
    </entry> 
</xsl:template> 

<xsl:template match="field"> 
    <xsl:element name="{@name}"> 
    <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

当所提供的XML文档应用(校正为良好的形成):

<ALLFields id="0001"> 
    <field name="ComputerName">ABC</field> 
    <field name="ComputerType">Windows</field> 
    <field name="DatabaseName" /> 
    <field name="CPULevel">10</field> 
</ALLFields> 

产生想要的,正确的结果:

<entry id="0001"> 
    <ComputerName>ABC</ComputerName> 
    <ComputerType>Windows</ComputerType> 
    <DatabaseName/> 
    <CPULevel>10</CPULevel> 
</entry> 
+0

+1模式匹配。 – 2011-04-07 16:46:30

+0

使用此代码: 'var myXslTrans = new XslCompiledTransform(); myXslTrans.Load(“Files/NaughtyXSLT_Transform.xsl”); myXslTrans.Transform(“Files/NaughtyXSLT_InputXML.xml”,“NaughtyXSLT_OutputXML.xml”);' 不起作用,jeez我无法编辑这个评论,因为某种原因! – Chazt3n 2014-02-26 03:37:32