4

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]"

何の結果も得られない

必死になって、属性値の周りで '' のさまざまな組み合わせも試しましたが、成功しませんでした。

私は何を間違っていますか?

よろしくお願いします。助けてくれてありがとう!リチャード

4

1 に答える 1

7

アットマーク@を使用して属性にアクセスします。

/y:design/y:measurements/y:measurement[@name='Measurement001']/y:sample[1]
                                       ^
于 2012-12-12T14:07:33.163 に答える