[英]How to transform the structure of xml document using 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>
<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
目前,我写了这个:
<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>
谢谢您的帮助,
弗洛里安
尝试使用以下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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.