2017-04-25 36 views
0

任何人都可以告訴我爲什麼這個Xdocument查詢返回null時有元素/屬性,我試圖抓住。我怎樣才能得到一個子元素的集合 - 查詢返回null使用Xdocument

我試圖獲得<version>元素的集合,所以我可以讀取它們的屬性。例如XML:

<dmodule> 
<idstatus> 
<dmaddres> 
<dmc>Some DMC</dmc> 
<dmtitle><techname>My techname</techname><infoname>My infoname</infoname></dmtitle> 
<issno issno="004" type="revised"> 
<issdate year="2016" month="11" day="30"></dmaddres> 
<status> 
<security class="2"> 
<rpc>RPC1</rpc> 
<orig>ORIG1</orig> 
<applic> 
<model model="2093"> 
**<version version="BASE"></version> 
<version version="RNWB"></version>**</model></applic> 
<techstd> 
<autandtp> 
<authblk></authblk> 
<tpbase>-</tpbase></autandtp> 
<authex></authex> 
<notes></notes></techstd> 
<qa> 
<firstver type="tabtop"></qa></status> 
</idstatus> 
<dmodule> 

這是如何我試圖讓<version>元素:

XDocument doc = XDocument.Load(sgmlReader); 

List<string> applicabilityList = null; 

//this doesn't work 
//var applics = doc.XPathSelectElements("dmodule/idstatus/status/applic/model/version"); 

//nor does this 
var applics = doc.Descendants("idstatus").Descendants("applic").Elements("version"); 

     foreach (var applic in applics) 
     { 
      string applicVersion = applic.Attribute("version").ToString(); 
      applicabilityList.Add(applicVersion); 

     } 

      return applicabilityList; 

無論是查詢如上圖所示,不會返回任何結果。 Cleary在我的查詢中發現了一個愚蠢的錯誤,但我沒有練習。

回答

1

這是因爲您錯過了model元素。

... 
<applic> 
    <model model="2093"> 
    <version version="BASE"></ 
... 

如果你所感興趣的是version元素,你可以簡單地做:

var versions = doc.Descendants("version"); 
+1

感謝奧菲爾,確實做了工作,爲第二次嘗試在查詢 - 這樣就解決了我的問題。然而,正如你在上面例子中的第一次嘗試中看到的那樣,我確實有Xpathselectelemet查詢中包含的'model'元素,但它不起作用。我嘗試刪除根元素'dmodule',但這也不起作用。 – Daedalus

+0

在第一個中缺少'security'元素 –

+0

不使用第二個示例的原因是因爲元素可能在XML文檔中的某處使用 - 我需要在此特定位置找到它們。再次感謝。 – Daedalus

1

這是工作的代碼

var applics = doc.Descendants("dmodule") 
       .Descendants("idstatus") 
       .Descendants("status") 
       .Descendants("security") 
       .Descendants("applic") 
       .Descendants("model") 
       .Elements("version"); 
+1

感謝Nikhil,這是因爲它實際上是SGML。我只是不想讓這個問題複雜化。在執行查詢之前,我不得不將SGML轉換爲XML - 這很正常。這只是這個具體的查詢。不過謝謝。 – Daedalus

相關問題