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 + "']";

Numberまたはの周りに空白が追加されているかどうかを確認することにも興味がありますStepNumber。基本的に:渡す実際の文字列クエリは何ですか? (連結後など)。

于 2010-07-17T22:03:00.273 に答える
2

文字列内でXPathQuery、数字を引用する必要があると思います。このような:

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