Xml 具有不同属性的XSLT连接
我的输入XML如下所示:Xml 具有不同属性的XSLT连接,xml,xslt,xpath,Xml,Xslt,Xpath,我的输入XML如下所示: <data> <Food_Output FoodNbr="171179"> <Parent> <row outputname="Menu Price 200.0" outputvalue="3" costvalue="0" outputid="26" send_to_kitchen="1" adjusted="0" id_server="42" />
<data>
<Food_Output FoodNbr="171179">
<Parent>
<row outputname="Menu Price 200.0" outputvalue="3" costvalue="0" outputid="26" send_to_kitchen="1" adjusted="0" id_server="42" />
<row outputname="Menu Price 212.0" outputvalue="5" costvalue="0" outputid="26" send_to_kitchen="1" adjusted="0" id_server="42" />
</Parent>
</Food_Output>
<Food_Input FoodNbr="171179">
<Parent>
<row id_price="212.2" text_cmnt1="Approved" text_cmnt2="Regular Menu Item"/>
<row id_price="200.0" text_cmnt1="Declined" text_cmnt2="Regular Menu Item"/>
</Parent>
</Food_Input>
</data>
<?xml version="1.0" encoding="UTF-8"?>
<addtn_kitchen_data>
<test>Menu Price 200.0</test>
<tblGuests>
<desc_adjmt_type>Regular Menu Item 212.2</desc_adjmt_type>
<text_credit_apprl>Approved</text_credit_apprl>
<text_cmnts>Regular Menu Item</text_cmnts>
<nbr_adjmt>5</nbr_adjmt>
</tblGuests>
<tblGuests>
<desc_adjmt_type>Regular Menu Item 200.0</desc_adjmt_type>
<text_credit_apprl>Declined</text_credit_apprl>
<text_cmnts>Regular Menu Item</text_cmnts>
<nbr_adjmt>3</nbr_adjmt>
</tblGuests>
</addtn_kitchen_data>
我希望我的输出XML如下所示:
<data>
<Food_Output FoodNbr="171179">
<Parent>
<row outputname="Menu Price 200.0" outputvalue="3" costvalue="0" outputid="26" send_to_kitchen="1" adjusted="0" id_server="42" />
<row outputname="Menu Price 212.0" outputvalue="5" costvalue="0" outputid="26" send_to_kitchen="1" adjusted="0" id_server="42" />
</Parent>
</Food_Output>
<Food_Input FoodNbr="171179">
<Parent>
<row id_price="212.2" text_cmnt1="Approved" text_cmnt2="Regular Menu Item"/>
<row id_price="200.0" text_cmnt1="Declined" text_cmnt2="Regular Menu Item"/>
</Parent>
</Food_Input>
</data>
<?xml version="1.0" encoding="UTF-8"?>
<addtn_kitchen_data>
<test>Menu Price 200.0</test>
<tblGuests>
<desc_adjmt_type>Regular Menu Item 212.2</desc_adjmt_type>
<text_credit_apprl>Approved</text_credit_apprl>
<text_cmnts>Regular Menu Item</text_cmnts>
<nbr_adjmt>5</nbr_adjmt>
</tblGuests>
<tblGuests>
<desc_adjmt_type>Regular Menu Item 200.0</desc_adjmt_type>
<text_credit_apprl>Declined</text_credit_apprl>
<text_cmnts>Regular Menu Item</text_cmnts>
<nbr_adjmt>3</nbr_adjmt>
</tblGuests>
</addtn_kitchen_data>
菜单价格200.0
常规菜单项212.2
经核准的
常规菜单项
5.
常规菜单项200.0
拒绝
常规菜单项
3.
这是我应用于它的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="/">
<addtn_kitchen_data>
<test>
<xsl:value-of select="data/Food_Output/Parent/row[@id_server='42']/@outputname"/>
</test>
<xsl:for-each select="data/Food_Input/Parent/row">
<xsl:choose>
<xsl:when test="@id_price">
<tblGuests>
<desc_adjmt_type><xsl:value-of select="@text_cmnt2"/><xsl:text> </xsl:text> <xsl:value-of select="@id_price"/>
</desc_adjmt_type>
<text_credit_apprl><xsl:value-of select="@text_cmnt1"/></text_credit_apprl>
<text_cmnts><xsl:value-of select="@text_cmnt2"/></text_cmnts>
<nbr_adjmt>
<xsl:value-of select="/data/Food_Output/Parent/row[@outputname='Menu Price 200.0']/@outputvalue"/>
</nbr_adjmt>
</tblGuests>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</addtn_kitchen_data>
</xsl:template>
</xsl:stylesheet>
现在我正在将XSLT中的@outputname硬编码为等于“菜单价格200.0”。本质上,我正在寻找一个XPath查询,当且仅当@outputname中的字符串包含“菜单价格”时,@outputname(在我的示例中为200.0)中的值与相应的@id_价格(200.0)相匹配
类似于此(这是不正确的):
有人能推荐一个XPath来满足我的需要吗?您可以这样做:
<nbr_adjmt>
<xsl:value-of select="/data/Food_Output/Parent/row[@outputname=concat('Menu Price ', current()/@id_price)]/@outputvalue"/>
</nbr_adjmt>
更好的方法可能是定义:
然后将其用作:
<nbr_adjmt>
<xsl:value-of select="key('row-by-price', @id_price)/@outputvalue"/>
</nbr_adjmt>
谢谢@michael.hor257k。这让我非常接近。但是我仍然缺少FoodOutput/Parent的第二个子行元素的outputvalue属性值。该值应为“5”。我在此处的输出:。这是因为“212.0”与“212.2”不匹配。比较:超级。只要一个小小的改变,就会有很大的不同。再次感谢@michael.hor257k。你又一次帮了我大忙。