如何使用xslt转换xml文档的结构

如何使用xslt转换xml文档的结构,xml,xslt,Xml,Xslt,这里是我的XML文档: <?xml version="1.0" ?> <ArrayOfPrimitiveParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <PrimitiveParameter> <Name>field</Name>

这里是我的XML文档:

<?xml version="1.0" ?> 
<ArrayOfPrimitiveParameter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">   
    <PrimitiveParameter>
        <Name>field</Name>
        <Value xsi:type="xsd:string">TNA</Value>
    </PrimitiveParameter>
    <PrimitiveParameter>
        <Name>date</Name>
        <Value xsi:type="xsd:dateTime">2011-12-14T00:00:00</Value>
    </PrimitiveParameter>
</ArrayOfPrimitiveParameter>

领域
TNA
日期
2011-12-14T00:00:00
我想将其结构转换为:

TNA 2011-12-14T00:00:00

就目前而言,我写了以下内容:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/TR/REC-html40"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                >
  <xsl:output method="xml" encoding="utf-8"/>
  <xsl:template match="/">
    <Parameters>
      <xsl:apply-templates/>
    </Parameters>
  </xsl:template>


  <xsl:template match="ArrayOfPrimitiveParameters">

      <!-- String -->
      <xsl:if test="PrimitiveParameter/@xsi:type = 'xsd:string'">
        <StringParameter>
          <xsl:attribute name="name">
            <xsl:value-of select='PrimitiveParameter/name' />">
          </xsl:attribute>
          <xsl:value-of select='PrimitiveParameter/value'/>
        </StringParameter>
      </xsl:if>

      <!-- DateTime -->
      <xsl:if test="PrimitiveParameter/@xsi:type = 'xsd:dateTime'">
        <DateParameter>
          <xsl:attribute name="name">
            <xsl:value-of select='PrimitiveParameter/name' />">
          </xsl:attribute>
          <xsl:value-of select='PrimitiveParameter/value'/>
        </DateParameter>
      </xsl:if>

    </xsl:template>
</xsl:stylesheet>

">
">
但我的XML的输出是:

<?xml version="1.0" encoding="utf-8"?><Parameters xmlns="http://www.w3.org/TR/REC-html40" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">   

        field
        TNA


        date
        2011-12-14T00:00:00

</Parameters>

领域
TNA
日期
2011-12-14T00:00:00
谢谢你的帮助


Florian

尝试使用以下XSL

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            >
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="/">
  <Parameters>
    <xsl:apply-templates/>
  </Parameters>
</xsl:template>

<xsl:template match="PrimitiveParameter">

    <!-- String -->
    <xsl:if test="Value/@xsi:type='xsd:string'">
      <xsl:element name="StringParameter">
        <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

    <!-- DateTime -->
    <xsl:if test="Value/@xsi:type='xsd:dateTime'">
      <xsl:element name="DateParameter">
        <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

  </xsl:template>
</xsl:stylesheet>

尝试使用以下XSL

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            >
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="/">
  <Parameters>
    <xsl:apply-templates/>
  </Parameters>
</xsl:template>

<xsl:template match="PrimitiveParameter">

    <!-- String -->
    <xsl:if test="Value/@xsi:type='xsd:string'">
      <xsl:element name="StringParameter">
        <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

    <!-- DateTime -->
    <xsl:if test="Value/@xsi:type='xsd:dateTime'">
      <xsl:element name="DateParameter">
        <xsl:attribute name="name">
          <xsl:value-of select="Name" />
        </xsl:attribute>
        <xsl:value-of select="Value" />
      </xsl:element>
    </xsl:if>

  </xsl:template>
</xsl:stylesheet>


我试试这个,谢谢!我试试这个,谢谢!