2014-03-27 57 views
0

我想查詢一個特定的一組值的XML文件。下面是我試圖查詢的xml文件的一部分。Linq to XML查詢...元素名稱問題

<Troubleshooter guid="5f159d5d-4dec-4caf-81e5-645d77e05c84"> 
<Name>Battery</Name> 
<AnalysisLog> 
    <LogEntry guid="76e4b077-bb50-4000-9563-7f5aa0c9dc26"> 
    <Name>Battery Information</Name> 
    <Severity>Informational</Severity> 
    <Description></Description> 
    <Details> 
     <Detail guid="118bf18a-13d4-4226-b207-f2ae1638de8b"> 
     <Name>Battery ID</Name> 
     <Value> 198311-85MO06047</Value> 
     </Detail> 
     <Detail guid="85b01a9b-bb18-4f71-8d12-6f7dec4b3705"> 
     <Name>Manufacturer</Name> 
     <Value>11-85</Value> 
     </Detail> 
     <Detail guid="1b9d5465-63f4-4c5d-8259-93effc455084"> 
     <Name>Manufacture Date</Name> 
     <Value></Value> 
     </Detail> 
     <Detail guid="2229029f-aa9e-4591-989a-32223a114538"> 
     <Name>Serial Number</Name> 
     <Value> 1983</Value> 
     </Detail> 
     <Detail guid="24e6973f-f544-4a33-876d-359ebc56336e"> 
     <Name>Chemistry</Name> 
     <Value>LION</Value> 
     </Detail> 
     <Detail guid="8676c4f7-8918-4007-af80-76e308ca983c"> 
     <Name>Long Term</Name> 
     <Value>1</Value> 
     </Detail> 
     <Detail guid="8800d772-7da3-48a1-b1e4-fc86df0e49cf"> 
     <Name>Sealed</Name> 
     <Value>0</Value> 
     </Detail> 
     <Detail guid="17d29a01-f010-4f66-bf60-c121e35cfc2b"> 
     <Name>Cycle Count</Name> 
     <Value></Value> 
     </Detail> 
     <Detail guid="beb3f51a-9d89-42ad-81c4-5f9b7f682fa4"> 
     <Name>Design Capacity</Name> 
     <Value>32249</Value> 
     </Detail> 
     <Detail guid="b42aa79e-8ee8-44ae-8a11-5fe87cf2822b"> 
     <Name>Last Full Charge</Name> 
     <Value>32249</Value> 
     </Detail> 
    </Details> 
    </LogEntry> 
</AnalysisLog> 

現在,我試圖用它來獲取值代碼如下所示:

Imports System 
Imports System.Xml 
Imports System.Linq 
Imports System.Xml.Linq 
Public Class Form1 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     Dim datapath As String = "c:\energyrep.xml" 
     Dim xelement As XElement = xelement.Load(datapath) 
     Dim dcValue = _ 
       From dc In xelement.Elements("detail") _ 
       Where CStr(dc.Element("name").Value) = "Design Capacity" _ 
       Select dc 
     For Each xEle As XElement In dcValue 
      MessageBox.Show(xEle.Element("value").Value) 
     Next xEle 

     Me.Close() 
    End Sub 
End Class 

我認爲這個問題是與細節元素名稱。我有它的具體指導。我認爲,因爲它以「/ detail」關閉,所以你可以用相同的方式查詢標題。任何幫助將不勝感激!謝謝!

編輯:澄清

我正在尋找一個元素「值」嵌套在「細節」元素,與具有「設計容量」的值的「name」元素一起。我需要它從以下位置返回「32249」值:

<Detail guid="beb3f51a-9d89-42ad-81c4-5f9b7f682fa4"> 
<Name>Design Capacity</Name> 
<Value>32249</Value> 
+0

你正在尋找一個特定的細節元素或整個列表?即使日誌條目不相關,您的LINQ也會查找名稱爲Design Capacity的所有細節元素。 –

+0

我正在尋找嵌套在「detail」元素中的元素「value」以及具有「Design Capacity」值的「name」元素。 我需要它返回上面顯示在編輯中的「32249」值。 – user3120457

+0

您是否只有一個具有Design Capacity名稱值的詳細元素用於整個文件?或者您是否每個日誌條目都有一個(或多個)? –

回答

0

XML區分大小寫。如果您正在查找Detail元素,則需要搜索Detail,而不是detail

Dim dcValue = _ 
      From dc In xelement.Elements("Detail") _ 
      Where CStr(dc.Element("Name").Value) = "Design Capacity" _ 
      Select dc 
    For Each xEle As XElement In dcValue 
     MessageBox.Show(xEle.Element("Value").Value) 
    Next xEle 
+0

直到明天我才能訪問我的項目,我將無法嘗試此操作,但這可以解釋爲什麼它不起作用。十分感謝你的幫助! – user3120457

+0

所以我實際上能夠生成我正在搜索的xml,並嘗試使用此代碼。我仍然沒有返回結果。有什麼建議麼? – user3120457

+0

嘗試'後代'而不是'元素'。 –

0

這裏,我們去...(C#)

 var readSP = from a in xd.Descendants("Detail") 
        where a.Element("Name").Value == "Design Capacity" 
        select a.Element("Value").Value;