给出以下XML:
<?xml version="1.0"?>
<purchaseOrder orderDate="1999-10-20">
<shipTo country="US">
<name>Alice Smith</name>
<street>123 Maple Street</street>
<city>Mill Valley</city>
<state>CA</state>
<zip>90952</zip>
</shipTo>
<billTo country="US">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>PA</state>
<zip>95819</zip>
</billTo>
<comment>Hurry, my lawn is going wild!</comment>
<items>
<item partNum="872-AA">
<productName>Lawnmower</productName>
<quantity>1</quantity>
<USPrice>148.95</USPrice>
<comment>Confirm this is electric</comment>
</item>
<item partNum="926-AA">
<productName>Baby Monitor</productName>
<quantity>1</quantity>
<USPrice>39.98</USPrice>
<shipDate>1999-05-21</shipDate>
</item>
</items>
</purchaseOrder>
如何从第2项中的USPrice中选择'98'。 我试过了:
purchaseOrder/items/item[USPrice[text()='39.98']]/USPrice/substring-after(.,'.')
但它一直给我错误'has an invalid token'
如果我尝试:
purchaseOrder/items/item[USPrice[text()='39.98']]/USPrice/text()[substring-after(.,'.')]
或
purchaseOrder/items/item[USPrice[text()='39.98']]/USPrice[substring-after(text(),'.')]
我得到'39.98'
这也是错误的。
我正在测试使用网站:
答案 0 :(得分:2)
严格来说,使用xpath 1.0
不能这样做使用XSLT以下方法可行,但我认为这不是您所需要的
<xsl:value-of select="substring-after(purchaseOrder/items/item[2]/USPrice,'.')"/>
请参阅此类似问题以获取更多信息
答案 1 :(得分:1)
您所使用的XPath表达式是:
substring-after(/purchaseOrder/items/item[2]/USPrice, '.')
您可以使用XPathNavigator.Evaluate()
答案 2 :(得分:0)
将/purchaseOrder/items/item[2]/USPrice
的值保存到变量(比如Price)中,然后使用$Price - floor($Price)
来计算价格的派系部分。
如果值为偶数个美元,则使用substring-after()
将无法返回任何内容,这可能导致转换的其余部分返回不正确的结果。