我有一块xslt文件,如下所示:
<xsl:template match="Request">
<Instrument>
<IdentifierType>
<xsl:value-of select="IDContext"/>
</IdentifierType>
<Identifier>
<xsl:value-of select="Identifier"/>
</Identifier>
<UserDefinedIdentifier>
<xsl:value-of select="UserDefinedIdentifier"/>
</UserDefinedIdentifier>
<xsl:if test="Param[@Key='Exchange']">
<Exchange>
<xsl:value-of select="Param[@Key='Exchange']"/>
</Exchange>
</xsl:if>
</Instrument>
</xsl:template>
一个输入的xml片段如下所示:
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
</Request>
现在我想稍微修改输入xml,以便输出如下:
<Instrument>
<IdentifierType>ISIN</IdentifierType>
<Identifier>XXX</Identifier>
<Exchange>EX</Exchange>
</Instrument>
我应该如何修改输入的xml文件?谢谢!
答案 0 :(得分:2)
XSLT当前正在寻找Param
元素,该元素是正在匹配的当前Request
元素的子元素。这意味着您希望您的XML看起来像这样:
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
<Param Key='Exchange'>EX</Param>
</Request>
话虽如此,这会产生以下输出:
<Instrument>
<IdentifierType>ISIN</IdentifierType>
<Identifier>XXX</Identifier>
<UserDefinedIdentifier/>
<Exchange>EX</Exchange>
</Instrument>
您显示的模板始终为UserDefinedIdentifier
元素创建Request
,无论XML中是否存在UserDefinedIdentifier
元素。解决这个问题的唯一方法是将XSLT更改为处理不存在的XSLT。