【问题标题】:Trying to select single node returns the error "Expression must evaluate to a node-set."尝试选择单个节点会返回错误“表达式必须计算为节点集”。
【发布时间】:2019-01-15 15:36:28
【问题描述】:

我尝试使用 xpath 选择单个节点,尽管在路径末尾使用 [1] 选择器并使用 XmlDocument.SelectSingleNode() 函数获取值,但它返回了错误。在我的其他网络应用程序中它可以工作。

我的 xml 文件:

<settings>
  <GUI>
    <Theme>Dark</Theme>
  </GUI>
  <Mgmt>
    <NotAdmin>
      <ViewItems>1</ViewItems>
      <EditItems>1</EditItems>
      <DeleteItems>0</DeleteItems>
      <MgmtPanel>0</MgmtPanel>
      <EditDB>0</EditDB>
      <EditRestric>0</EditRestric>
    </NotAdmin>
  </Mgmt>
 </settings>

我的 C# 代码:

XmlDocument SettingsXMLdoc = new XmlDocument();
string svrSettingsPath = 
HostingEnvironment.MapPath("~/App_Data/AppSettings.xml");
SettingsXMLdoc.Load(svrSettingsPath);
XmlNode node = 
SettingsXMLdoc.SelectSingleNode(//(/settings/Mgmt/NotAdmin/ViewItems) 
[1]);
return node.InnerText; 

它应该选择节点,但返回错误“表达式必须计算为节点集。”。

【问题讨论】:

    标签: c# asp.net xml xpath


    【解决方案1】:

    这对我来说很好用:

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(Your_path_here);
    XmlNode oneNode = xmlDoc.SelectSingleNode("settings/Mgmt/NotAdmin/ViewItems");
    

    【讨论】:

      【解决方案2】:

      这是一个非常糟糕的错误消息,但您的表达式在 XPath 2.0 下有效,但在 XPath 1.0 下无效。 XPath 1.0 不允许在 "//" 运算符之后使用带括号的子表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-29
        • 2020-07-13
        • 2011-03-29
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多