XPath substring-after

时间:2012-02-14 09:02:32

标签: c# xpath

给出以下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'这也是错误的。

我正在测试使用网站:

http://www.xmlme.com/XpathTool.aspx

3 个答案:

答案 0 :(得分:2)

严格来说,使用xpath 1.0

不能这样做

使用XSLT以下方法可行,但我认为这不是您所需要的

<xsl:value-of select="substring-after(purchaseOrder/items/item[2]/USPrice,'.')"/>

请参阅此类似问题以获取更多信息

How to apply the XPath function 'substring-after'

答案 1 :(得分:1)

您所使用的XPath表达式是

substring-after(/purchaseOrder/items/item[2]/USPrice, '.')

您可以使用XPathNavigator.Evaluate()

直接在C#代码(不使用XSLT)中评估此XPath表达式

答案 2 :(得分:0)

/purchaseOrder/items/item[2]/USPrice的值保存到变量(比如Price)中,然后使用$Price - floor($Price)来计算价格的派系部分。

如果值为偶数个美元,则使用substring-after()将无法返回任何内容,这可能导致转换的其余部分返回不正确的结果。