【问题标题】:Xpath, retrieving node valueXpath,检索节点值
【发布时间】:2009-10-02 08:28:34
【问题描述】:

我从 Sharepoint 获得这个返回值...我刚刚包含了 xml sn-p 的第一部分...

<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 结果 = list.UpdateListItems("MySharePointList", batch);

更新

到目前为止,我有这个:results.FirstChild.ChildNodes[2].Attributes["ows_ID"].Value

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

【问题讨论】:

  • 这不完全是 xpath,而仅仅是 DOM 访问。使用传统的 xpath 库将为您提供与您的查询匹配的节点列表 - 试试吧。

标签: c# xml xpath


【解决方案1】:

我不知道它是否一定是改进,但它可能更具可读性,虽然更冗长:

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

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

函数 local-name() 可以让您忽略命名空间,这既是福音,也是诅咒。 :)

【讨论】:

    【解决方案2】:

    当你从 root 开始时:

    /Result/z:row/@ows_ID

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

    /Result[@ID='1,New']/z:row/@ows_ID

    【讨论】:

      【解决方案3】:
      <xsl:value-of select="Result/b:row/@ows_ID"/>
      

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

      取决于你想要什么价值

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          详情看这里:W3Schools XPath syntax

          【讨论】:

          • 我不知道 ows_id 的值,这就是我要检索的。关于如何将该值作为字符串获取的任何想法?我正在使用 C#
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-01
          • 1970-01-01
          • 2011-05-30
          • 2017-08-13
          • 1970-01-01
          • 2017-11-16
          • 1970-01-01
          相关资源
          最近更新 更多