XPath でノードを選択する際に問題があります。例を示します。実際のファイルには膨大な量のデータがあるため、xml ファイルは短縮されています。
これは XML のサブセットです。
<?xml version="1.0" encoding="ISO-8859-1"?>
<design xmlns="namespace_hidden" createddate="2012-12-07" createdby="User" name="New Design">
...
<variables>
<measurements>
<measurement name="Measurement001">
<sample name="1">
<position>[0,0]</position>
<variables>
<qualitative name="bId">
<class>2193</class>
</qualitative>
</variables>
</sample>
...
<sample name="4">
<position>[3,0]</position>
<variables>
<qualitative name="Q2">
<class>V0</class>
</qualitative>
<qualitative name="Q3">
<class>V2</class>
</qualitative>
<qualitative name="Q4">
<class>V1</class>
</qualitative>
<quantitative name="Q5">
<unit>Percent</unit>
<value>8</value>
</quantitative>
</variables>
</sample>
</measurement>
<measurement name="Measurement002">
..
</measurement>
...
</measurements>
</design>
今、特定の測定の下で、特定のサンプルの下ですべての変数を選択しようとしています。
これは私が使用するクエリ方法です:
// Creating the navigator
var doc = new XPathDocument(xmlDoc[0]);
var navigator = doc.CreateNavigator();
// Creating the namespace manager:
XmlNamespaceManager nsMan = null;
if (navigator.NameTable != null) {
nsMan = new XmlNamespaceManager(navigator.NameTable);
nsMan.AddNamespace("y", xmlNs);
nsMan.PushScope();
}
// Executing the query
var iterator = navigator.Select(string.Format("/y:design/y:measurements/y:measurement[name='{0}']/y:sample[name={1}]/y:variables/y:qualitative", currentMeasurement.Name, currentSample.Name), nsMan);
このクエリを使用すると、最初の測定値と最初のサンプルが取得されるため、次のように機能します。
string.Format("/y:design/y:measurements/y:measurement[1]/y:sample[1]"
しかし、このクエリを使用すると:
"/y:design/y:measurements/y:measurement[name='Measurement001']/y:sample[1]"
何の結果も得られない
必死になって、属性値の周りで '' のさまざまな組み合わせも試しましたが、成功しませんでした。
私は何を間違っていますか?
よろしくお願いします。助けてくれてありがとう!リチャード