2011-04-07 2 views
0

HI,Нужна трансформация XSLT для преобразования входного XML в выходной XML

Я ищу для преобразования входных XML в OUTput XML с использованием XSLT.

Входной XML, как показано ниже

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

OUTPUT XML, что мне нужно, это

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

Не могли бы вы отформатировать свой вопрос, чтобы можно было прочитать XML-схему и предоставить то, что вы уже пробовали. – detaylor

ответ

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'. –

+0

Это было ' ...' поэтому я выбрал 'entry'. Спасибо, обновлено. – khachik

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 шаблон соответствия. –

+0

Используя этот код: 'var myXslTrans = new XslCompiledTransform(); myXslTrans.Load ("Files/NaughtyXSLT_Transform.xsl"); myXslTrans.Transform ("Files/NaughtyXSLT_InputXML.xml"), ' Не работает, jeez Я никак не могу отредактировать этот комментарий! – Chazt3n

Смежные вопросы