2012-12-12 196 views
4

我在使用XPath選擇節點時遇到問題。我將展示的例子中,XML文件是否是真正的一個由於縮短到數據的廣泛金額:XPath選擇具有特定屬性值的元素?

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

我沒有得到任何結果

無奈之下,我也嘗試過不同的屬性值周圍的''組合,但沒有成功。

我在做什麼錯?

此致敬意,並感謝您的幫助! 理查德

回答

6

使用at符號@訪問屬性:

/y:design/y:measurements/y:measurement[@name='Measurement001']/y:sample[1] 
            ^
相關問題