【问题标题】:Xpath expression to retrieve all child node's value onlyXpath 表达式仅检索所有子节点的值
【发布时间】:2016-08-03 11:08:04
【问题描述】:

我需要一个 XPath 表达式从以下示例 XML 脚本中仅检索 BalanceResult 属性的特定值:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
    <ars:QueryBalanceResultMsg xmlns:ars="http://www.huawei.com/bme/cbsinterface/arservices" xmlns:arc="http://cbs.huawei.com/ar/wsservice/arcommon" xmlns:cbs="http://www.huawei.com/bme/cbsinterface/cbscommon">
        <QueryBalanceResult>
            <ars:AcctList>
                <ars:BalanceResult>
                    <arc:BalanceType>C_MAIN_ACCOUNT</arc:BalanceType>
                    <arc:BalanceTypeName>MainAccount</arc:BalanceTypeName>
                    <arc:TotalAmount>80000</arc:TotalAmount>
                    <arc:BalanceDetail>
                        <arc:BalanceInstanceID>702000000000008916</arc:BalanceInstanceID>
                        <arc:EffectiveTime>20160803080942</arc:EffectiveTime>
                        <arc:ExpireTime>20370101010000</arc:ExpireTime>
                    </arc:BalanceDetail>
                </ars:BalanceResult>
                <ars:BalanceResult>
                    <arc:BalanceType>C_Bonus_Account</arc:BalanceType>
                    <arc:BalanceTypeName>Bonus Balance Account</arc:BalanceTypeName>
                    <arc:TotalAmount>3900</arc:TotalAmount>
                    <arc:BalanceDetail>
                        <arc:BalanceInstanceID>702000000000008543</arc:BalanceInstanceID>
                        <arc:EffectiveTime>20160803082506</arc:EffectiveTime>
                        <arc:ExpireTime>20191211121212</arc:ExpireTime>
                    </arc:BalanceDetail>
                </ars:BalanceResult>
               .......
            </ars:AcctList>
        </QueryBalanceResult>
    </ars:QueryBalanceResultMsg>
</soapenv:Body>

这样我的表达式会返回如下内容:

C_MAIN_ACCOUNT, 80000, 20370101010000, C_Bonus_Account, 3900, 20191211121212,... 上面的模板:(arc:BalanceType, arc:TotalAmount, arc:ExpireTime)

下面的表达式返回所有内容,包括不需要的标签。

//*[local-name()='BalanceResult'][*[local-name()='BalanceType']]

另外,由于可能有 n 个 BalanceResult 属性(在上面的示例中,它是 2 个),我无法提出解决方案。

感谢任何帮助!谢谢。

【问题讨论】:

    标签: xml xpath xml-parsing


    【解决方案1】:

    怎么样:

    //BalanceResult/descendant::*[local-name() = 'BalanceType' or local-name() = 'TotalAmount' or local-name() = 'ExpireTime']
    

    这会导致:

    <BalanceType>C_MAIN_ACCOUNT</BalanceType>
    <TotalAmount>80000</TotalAmount>
    <ExpireTime>20370101010000</ExpireTime>
    <BalanceType>C_Bonus_Account</BalanceType>
    <TotalAmount>3900</TotalAmount>
    <ExpireTime>20191211121212</ExpireTime>
    

    请注意,我从您的示例中删除了命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2016-10-03
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多