Xml 使用键控参数的XSLT转换
我有一个xslt文件,如下所示:Xml 使用键控参数的XSLT转换,xml,xslt,Xml,Xslt,我有一个xslt文件,如下所示: <xsl:template match="Request"> <Instrument> <IdentifierType> <xsl:value-of select="IDContext"/> </IdentifierType> <Identifier> <xsl:
<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>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
</Request>
<Instrument>
<IdentifierType>ISIN</IdentifierType>
<Identifier>XXX</Identifier>
<Exchange>EX</Exchange>
</Instrument>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
<Param Key='Exchange'>EX</Param>
</Request>
一个输入xml片段如下所示:
<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>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
</Request>
<Instrument>
<IdentifierType>ISIN</IdentifierType>
<Identifier>XXX</Identifier>
<Exchange>EX</Exchange>
</Instrument>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
<Param Key='Exchange'>EX</Param>
</Request>
XXX
伊辛
现在我想稍微修改一下输入xml,以便输出如下:
<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>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
</Request>
<Instrument>
<IdentifierType>ISIN</IdentifierType>
<Identifier>XXX</Identifier>
<Exchange>EX</Exchange>
</Instrument>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
<Param Key='Exchange'>EX</Param>
</Request>
伊辛
XXX
前任
如何修改输入xml文件?谢谢大家! XSLT当前正在寻找一个
Param
元素,该元素是正在匹配的当前Request
元素的子元素。这意味着您希望您的XML如下所示:
<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>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
</Request>
<Instrument>
<IdentifierType>ISIN</IdentifierType>
<Identifier>XXX</Identifier>
<Exchange>EX</Exchange>
</Instrument>
<Request>
<Identifier>XXX</Identifier>
<IDContext>ISIN</IDContext>
<Param Key='Exchange'>EX</Param>
</Request>
XXX
伊辛
前任
话虽如此,这将生成以下输出:
<Instrument>
<IdentifierType>ISIN</IdentifierType>
<Identifier>XXX</Identifier>
<UserDefinedIdentifier/>
<Exchange>EX</Exchange>
</Instrument>
伊辛
XXX
前任
无论XML中是否存在
UserDefinedIdentifier
元素,您显示的模板始终为请求
元素创建一个UserDefinedIdentifier
。解决这个问题的唯一方法是将XSLT更改为处理一个不存在的XSLT。在哪里检索Param
信息?按照上面描述的方式编写,Param应该是
中的一个元素。。。您的样本输入真的代表了您的数据吗?@potame谢谢您的评论。我应该生成输入xml文件,这样我就可以自由地根据上面的xslt文件获得所需的输出。是的,我的示例输入正是我们当前提供给xslt文件的内容。当然,它是完整xml文件的一段代码。我可以将所需的数据(可能是参数
ifnormalation)放在输入xml文件的任何位置(在
元素的内部或外部)。谢谢您的回答!userdefinedindnetifier
对我来说不是问题,所以我没有提到它。因为我对xslt知之甚少,所以我认为Param
和Key
都是xslt中的关键词,而不是我定义的一些随机元素/属性。