Попытка выбрать один узел возвращает ошибку «Выражение должно вычисляться для набора узлов». - PullRequest
0 голосов
/ 15 января 2019

Я попытался выбрать один узел, используя 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; 

Он должен выбрать узел, но возвращает ошибку «Выражение должно вычисляться для набора узлов.».

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Это очень плохое сообщение об ошибке, но ваше выражение допустимо в XPath 2.0, но недопустимо в XPath 1.0. XPath 1.0 не допускает заключенное в скобки подвыражение после оператора "//".

0 голосов
/ 15 января 2019

Для меня это нормально работает:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Your_path_here);
XmlNode oneNode = xmlDoc.SelectSingleNode("settings/Mgmt/NotAdmin/ViewItems");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...