【发布时间】:2015-07-15 22:06:15
【问题描述】:
我的输入 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 看起来像这样:
<?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>
这是我正在应用的 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”。本质上,当且仅当@outputname 中的字符串包含“菜单价格”时,我正在寻找将@outputname(在我的示例中为200.0)中的值与相应的@id_price (200.0) 匹配的XPath 查询。
类似这样的事情(这是不正确的):
<xsl:value-of select="/data/Quote_Output/Parent/row[@outputname='Menu Price" & @id_grd & "']/@outputvalue"/>
谁能推荐一个 XPath 来满足我的需求?
【问题讨论】: