1
<?xml version="1.0" encoding="utf-16"?>
<users>
  <user number="0772247157">
    <step stepnumber="1">complete</step>
    <step stepnumber="2">complete</step>
    <step stepnumber="3">complete</step>
  </user>
  <user number="0772247158">
    <step stepnumber="1">complete</step>
    <step stepnumber="2">complete</step>
  </user>
  <user number="0772247159">
    <step stepnumber="1">complete</step>
  </user> 
</users>

查询如

//user[@number='0772243950']并且//user[@number=0772243950]/step[last()]使用 SelectSingleNode 方法可以毫无问题地工作。

但是,以下函数总是返回 null。它与 XPath Visualizer 完美配合,我使用在线 XPath 评估器进行了仔细检查。

public bool checkStepExists(string Number, string StepNumber)
{
    string XPathQuery = "//user[@number=" + Number + "]/step[@stepnumber=" + StepNumber + "]";

    XmlNode Search = SettingsFile.SelectSingleNode(XPathQuery);      

    if (Search == null)
       return false;
    else
       return true;            
}

在问这个问题之前,我在 SO 上进行了搜索,所有这些都指向命名空间问题。但我无法理解的是,这是一个没有命名空间的本地 XML 文件。或者,我应该总是有一个命名空间和一个前缀并使用它吗?

4

2 回答 2

2

也许用额外的引号试试?

string XPathQuery = "//user[@number='" + Number + "']/step[@stepnumber='"
          + StepNumber + "']";

我也有兴趣检查是否在Numberor周围添加了任何空格StepNumber。基本上:您传入的实际字符串查询是什么?(在连接等之后)。

于 2010-07-17T22:03:00.273 回答
2

在您的字符串XPathQuery中,我认为您需要引用数字。像这样:

string XPathQuery = "//user[@number=\"" + Number + "\"]/step[@stepnumber=\"" + StepNumber + "\"]";
于 2010-07-17T22:04:54.077 回答