【问题标题】:xml error:System.Xml.XPath.XPathException: Expression must evaluate to a node-setxml 错误:System.Xml.XPath.XPathException:表达式必须计算为节点集
【发布时间】:2013-06-28 02:05:59
【问题描述】:

我试图在我的 xml 文件中查找一个节点,但出现错误(见标题)?

 // instantiate XmlDocument and load XML from file
        XmlDocument doc = new XmlDocument();
        doc.Load(@"C:\temp\test2.xml");
        var  node = doc.SelectSingleNode("/Offers/Offer/ID=[text()='1']");
        var test = node;

xml

<?xml version="1.0" encoding="utf-8"?>
<Offers>
  <Offer>
    <Model>AAAA</Model>
    <ID>1</ID>
    <Name>First offer</Name>
  </Offer>
  <Offer>
    <Model>BBBB</Model>
    <ID>2</ID>
    <Name>Second offer</Name>
  </Offer>
  </Offers>

【问题讨论】:

  • 这是一个非常糟糕的错误消息,因为您的 XPath 表达式在语法上无效,它应该是语法错误而不是类型错误。

标签: c# xml


【解决方案1】:

去掉ID后面的=

 var  node = doc.SelectSingleNode("/Offers/Offer/ID=[text()='1']");

变成:

 var  node = doc.SelectSingleNode("/Offers/Offer/ID[text()='1']");

【讨论】:

  • 好的,如果我想在这里更改名称节点,该怎么做?通过使用 ID 密钥
  • doc.SelectSingleNode("/Offers/Offer/ID[text()='1']").NextSibling.InnerText = "new text"; - 应该完成这项工作。
  • doc.SelectSingleNode("/Offers/Offer/ID[text()='1']").ParentNode.SelectSingleNode("Name").InnerText = "new text";
猜你喜欢
  • 2020-04-29
  • 1970-01-01
  • 2020-07-13
  • 2011-03-29
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
相关资源
最近更新 更多