我有以下xml
<FRA>
<Id>USD Libor Futures</Id>
<PriceBasis>EuroDollar</PriceBasis>
</FRA>
我想要以下输出
<FRA>
<Id>USD Libor Futures</Id>
<PriceBasis>EuroDollar</PriceBasis>
<ModifyMktData srcontractid="USD Libor Futures Convexity" optype="add" srctype="Spread" dsttype="Price"/>
</FRA>
我正在使用以下xslt:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="FRA/PriceBasis">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
<xsl:variable name="fraid" select="Id"/>
<ModifyMktData>
<Update srccontractid="{$fraid} Convexity" optype="add" srctype="Spread" dsttype="Price"/>
</ModifyMktData>
</xsl:template>
</xsl:stylesheet>
xslt的输出如下所示:
<FRA>
<Id>USD LIBOR Futures</Id>
<PriceBasis>EuroDollar</PriceBasis>
<ModifyMktData>
<Update srccontractid=" Convexity" optype="add" srctype="Spread" dsttype="Price" />
</ModifyMktData
</FRA>
我基本上希望在ModifyMktData的属性中重用Id。显然我所拥有的xslt并不像我希望的那样工作。它不会将Id字段添加到srccontractid字段。 提前谢谢。
答案 0 :(得分:1)
您的代码存在问题 context 。在您定义变量的位置:
<xsl:variable name="fraid" select="Id"/>
您位于匹配PriceBasis
元素的模板中。这意味着此变量定义的上下文是特定的PriceBasis
元素。但是,显然,PriceBasis
元素没有子元素Id
。
相反,Id
是FRA
的子元素。在这种情况下,Id
的正确路径是:
../Id
下面的样式表简化了代码,根本不使用变量。对于../Id
这个短的表达式,我不明白为什么你需要一个变量。您可以将路径表达式直接放在属性值模板括号内:
{../Id}
<强>样式表强>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="PriceBasis">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
<ModifyMktData>
<Update srccontractid="{../Id} Convexity" optype="add" srctype="Spread" dsttype="Price"/>
</ModifyMktData>
</xsl:template>
</xsl:stylesheet>
XML输入
您的输入格式不正确,任何XML应用程序都不会接受。假设以下输入,Fra
元素再次关闭:
<FRA>
<Id>USD Libor Futures</Id>
<PriceBasis>EuroDollar</PriceBasis>
</FRA>
XML输出
<?xml version="1.0" encoding="utf-8"?>
<FRA>
<Id>USD Libor Futures</Id>
<PriceBasis>EuroDollar</PriceBasis>
<ModifyMktData>
<Update srccontractid="USD Libor Futures Convexity" optype="add" srctype="Spread" dsttype="Price"/>
</ModifyMktData>
</FRA>
答案 1 :(得分:0)
首先,您的模板匹配FRA/PriceBasis
,这在输入中不存在。看起来您只想匹配FRA
。
其次,您在Update
节点下创建了一个ModifyMktData
节点,该节点不在上面列出的所需输出中。
除此之外,你所做的事情看起来应该有效。