【问题标题】:Get sibling values based on a single node's value from an XML document根据 XML 文档中单个节点的值获取同级值
【发布时间】:2014-01-05 18:08:34
【问题描述】:

我想遍历这些结果(现在有 2 个,但在某些情况下可能多达 100 个)。 当我在 <doc> 节点中找到与国家代码的特定值匹配时,我想从同一个 <doc> 节点中选择纬度和经度值。

例如当我搜索国家代码值“US”时,我想返回值-79.023635.1379,分别是经度和纬度。

我正在尝试在 ASP.NET 中执行此操作,其中将下面的 XML 加载到 XMLDocument 变量 objXML

我知道如何选择国家代码,但不知道如何获取相关的经纬度节点。

objXML.SelectSingleNode("//response/result/doc/str[@name='US']").InnerText

<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">3</int>
        <lst name="params">
            <str name="facet">false</str>
            <str name="fl">id,geonameid,title,latitude,longitude,countrycode</str>
            <str name="indent">off</str>
            <str name="start">0</str>
            <str name="q">title_search:*nijmegen*</str>
            <str name="rows">10</str>
            <str name="defType">lucene</str>
        </lst>
    </lst>
    <result name="response" numFound="2" start="0">
        <doc>
            <str name="countrycode">US</str>
            <str name="title">Nijmegen</str>
            <str name="longitude">-79.0236</str>
            <str name="geonameid">4482161.0</str>
            <str name="latitude">35.1379</str>
        </doc>
        <doc>
            <str name="countrycode">NL</str>
            <str name="title">nijmegen</str>
            <str name="longitude">5.85278</str>
            <str name="geonameid">2750053.0</str>
            <str name="latitude">51.8425</str>
        </doc>
    </result>
</response>

【问题讨论】:

    标签: asp.net xml xslt xmldocument selectsinglenode


    【解决方案1】:

    我不认为您的 XPath 可以工作,没有带有 @name ='US' 的 str 元素。但是使用 Xpath 2.0 你可以尝试:

    //response/result/doc/str[@name="countrycode"][.='US']/../(str[@name="longitude"] | str[@name="latitude"])
    

    【讨论】:

    • 啊,你说得对,这确实行不通:)。我试过这个:如果 objXML.SelectSingleNode("//response/result/doc/str[@name=""countrycode""][.='" + countrycodes(i) + "']/../(str[ @name=""longitude""] | str[@name=""latitude""])") IsNot Nothing Then But then get: Expression must evaluate to a node-set..你表达的结果是什么?有没有办法将 XMLDocument 中的纬度和经度值检索到数组中?或者通过 2 个单独的选择(不是首选)。谢谢!
    • 嗯,我不确定 ASP>NET 方面的情况。也许两个单独的选择是最简单的: //response/result/doc/str[@name="countrycode"][.='US']/../str[@name="longitude"] 和 //response/结果/doc/str[@name="countrycode"][.='US']/../str[@name="latitude"]
    • 出于兴趣,对于初始表达式,xpath 2.0 中的结果是两项,即 str[@name="longitude"] 和 str[@name="latitude"] 的值。但我认为 .NET 方面可能会导致这一点(我对 .NET 的了解绝对为零:)
    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多