【问题标题】:Finding node in xml by attribute that starts with string通过以字符串开头的属性在 xml 中查找节点
【发布时间】:2018-03-05 13:54:30
【问题描述】:

我有很大的 xml。 xml 的节点具有属性 id,其值如下:“1_32434”、“2_45656”。使用此代码:

var node = myXml.XPathSelectElement(string.Format("//*[starts-with(@id,\"{0}_\"))", someValue));

我正在尝试查找具有以“someValue_”开头的属性 id 的所有节点,但我收到错误消息,提示存在无效令牌。

【问题讨论】:

  • 一个[ 打开,没有一个关闭。
  • 请注意,这会受到注入:无论someValue 包含双引号,它都会失败。请务必验证您的输入,或将查询编写为代码 (myXml.DescendantsAndSelf().Where(e => (e.Attribute("id")?.Value ?? "").StartsWith(someValue)))。

标签: c# xml


【解决方案1】:

左括号和右括号不匹配,尝试将最后一个')'替换为']'

string.Format("//*[starts-with(@id,\"{0}_\")]", someValue)

【讨论】:

    【解决方案2】:

    我并不为这个 xpath 感到骄傲。但它应该给你所有的节点,不管起始ID。如果您一次只需要一个 id。你应该在你当前的 xpath 中添加一个结束括号。

    "//*[number(substring-before(@id,"_"))<10 and number(substring-after(@id,"_"))]"
    

    非常感谢一些示例 XML。

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 2011-06-16
      • 2014-07-30
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 2011-08-18
      • 2014-08-02
      • 2022-08-11
      相关资源
      最近更新 更多