代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

xpath,检索节点值

  •  0
  • JL. Hans Passant  · 技术社区  · 15 年前

    我从SharePoint获取此返回值…我刚刚包含了XML片段的第一部分…

    <Result ID=\"1,New\" xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">
    <ErrorCode>0x00000000</ErrorCode><ID /><z:row ows_ID=\"9\"
    

    它填充一个xmlnode节点对象。

    如何使用xpath获取ows-id的值?

    我的代码到目前为止…

    xmlnode results=list.updateListitems(“mySharePointList”,批处理);

    更新

    到目前为止,我有以下内容:results.firstchild.childnodes[2].attributes[“ows_id”].value

    但我不确定它有多可靠,有人能改进它吗?

    5 回复  |  直到 9 年前
        1
  •  2
  •   Zach Bonham    15 年前

    我不知道它是否一定是 改进 ,但它可能更可读,尽管更详细:

    /*[local-name() = 'Result']/*[local-name() = 'row']/@ows_ID
    

    您发布的片段可能还有更多内容,因此当针对实际的XML结果使用此xpath查询时,可能需要修正。

    函数local-name()允许您忽略名称空间,这既可以是一种恩惠,也可以是一种诅咒。:)

        2
  •  0
  •   Dewfy    15 年前

    从根目录开始时:

    /结果/z:row/@ows_id

    如果存在多个结果,还可以改进搜索:

    /结果[@id='1,new']/z:row/@ows_id

        3
  •  0
  •   Tommy    15 年前
    <xsl:value-of select="Result/b:row/@ows_ID"/>
    

    <xsl:value-of select="Result/b:row[@ows_ID = '9']"/>
    

    取决于你想要的价值

        4
  •  0
  •   brabster    15 年前

    您可能需要确保正确地声明了z名称空间前缀——这取决于实现。 Here's how you do it in Java's XPath implementation .

    然后,要选择ows_id属性的值,需要导航到元素本身,然后使用@ows_id获取该值。

        5
  •  0
  •   Developer NickAb    9 年前

    特定的xpath调用取决于您使用的库(例如libxml xpath实现)。 但是通用的xpath语句是:

    "//z:row[@ows_ID='9']"
    

    这将选择具有值9的属性ows_id的所有z:行节点。 您可以修改此查询以匹配所有z:行节点或仅匹配具有特定属性的节点。

    有关详细信息,请查看此处: W3Schools XPath syntax