我从数据库 xml 字符串中检索:
任何一个 :
<?xml version="1.0" ?>
<Parameters>
<StringParameter name="field">TNA</StringParameter>
<DateParameter name="date">2011-12-14T00:00:00</DateParameter>
</Parameters>
任何一个 :
<?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>
我只想在第二种情况下转换输出。但是我的 xslt 样式表转换了所有情况(1 和 2)。今天我已经使用 SQL Where 过滤器解决了问题,但我想知道如何使用 XSL 来做到这一点。
这是我的 XsltStyleSheet :
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xsd xsi"
>
<xsl:output method="xml" omit-xml-declaration="yes" standalone="yes" />
<xsl:template match="ArrayOfPrimitiveParameter" >
<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:if test="Key">
<xsl:attribute name="DomainKey">
<xsl:value-of select="Key" />
</xsl:attribute>
</xsl:if>
<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>
<!-- Boolean -->
<xsl:if test="Value/@xsi:type='xsd:boolean'">
<xsl:element name="BoolParameter">
<xsl:attribute name="name">
<xsl:value-of select="Name" />
</xsl:attribute>
<xsl:value-of select="Value" />
</xsl:element>
</xsl:if>
<!-- Double -->
<xsl:if test="Value/@xsi:type='xsd:double'">
<xsl:element name="BoolParameter">
<xsl:attribute name="name">
<xsl:value-of select="Name" />
</xsl:attribute>
<xsl:value-of select="Value" />
</xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
问候,
弗洛里安