簡體   English   中英

從XML XDocument(VB.NET)選擇多個值

[英]Selecting multiple values from XML XDocument (VB.NET)

我有一些帶有標記的XML文件,如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<clients>
    <client id="00000" name="Donald Duck">
        <group id="AAA" name="ClientInfo">
            <term id="Sex">Male</term>
            <term id="Status">In a relationship</term>
        </group>
        <group id="BBB" name="ClientTelephoneNumbers">
            <term id="Home">0000-0000000</term>
            <term id="Cell">1111-1111111</term>
        </group>
        <group id="CCC" name="WorkingStatus">
            <term id="HasAJob">Yes</term>
            <term id="Where">Somewhere</term>
        </group>
    </client>
    <client id="11111" name="Daisey Duck">
        <group id="AAA" name="ClientInfo">
            <term id="Sex">Female</term>
            <term id="Status">In a relationship</term>
        </group>
        <group id="BBB" name="ClientTelephoneNumbers">
            <term id="Home">2222-2222222</term>
            <term id="Cell">3333-3333333</term>
        </group>
        <group id="CCC" name="WorkingStatus">
            <term id="HasAJob">Unknown</term>
            <term id="Where">Unknown</term>
        </group>
    </client>
</clients>

我想做的只是選擇其中一些值進行輸出。

如果我有這樣的代碼:

Dim xml As XDocument = Xdocument.Load(ducks.xml)
For Each Duck As XElement in xml.Descendants("client")
    Dim Name As String = Duck.Attribute("Name").Value
Next

我得到了鴨子的名字,但是假設我想獲得手機號碼,家庭電話號碼和狀態,那么我該如何從屬性等於某物的元素中獲取值呢?

在實際情況下,組ID:s更復雜,因此我希望不必對元素進行計數,而是希望通過其元素屬性來選擇它們。 像這樣:

Dim xml As XDocument = Xdocument.Load(ducks.xml)
For Each Duck As XElement in xml.Descendants("client")
    Dim Name As String = Duck.Attribute("Name").Value
    Dim Cellphone As string = Duck.Element("group WHERE id IS BBB").Element("term WHERE id IS Cell").Value
    Dim Homephone As string = Duck.Element("group WHERE id IS BBB").Element("term WHERE id IS Home").Value
Next

我已經嘗試了一些查詢,但實際上無法掌握它。 有什么建議么?

編輯說明:這不是我真正的查詢嘗試,也不是Duck.Element(“ blah WHERE blah”)中的某些內容,僅用於描述我想要的...

這是一個例子:

Dim v = From clt In xml.<client>
        Where clt.@name = "Donald Duck"
        Select cellPhone = clt...<term>.Where(Function(x) x.@id = "Cell").Value,
               homePhone = clt...<term>.Where(Function(x) x.@id = "Home").Value,
               status = clt...<term>.Where(Function(x) x.@id = "Status").Value

適用於您的測試用例:

Dim xml = <clients>
            <client id="00000" name="Donald Duck">
              <group id="AAA" name="ClientInfo">
                <term id="Sex">Male</term>
                <term id="Status">In a relationship</term>
              </group>
              <group id="BBB" name="ClientTelephoneNumbers">
                <term id="Home">0000-0000000</term>
                <term id="Cell">1111-1111111</term>
              </group>
              <group id="CCC" name="WorkingStatus">
                <term id="HasAJob">Yes</term>
                <term id="Where">Somewhere</term>
              </group>
            </client>
            <client id="11111" name="Daisey Duck">
              <group id="AAA" name="ClientInfo">
                <term id="Sex">Female</term>
                <term id="Status">In a relationship</term>
              </group>
              <group id="BBB" name="ClientTelephoneNumbers">
                <term id="Home">2222-2222222</term>
                <term id="Cell">3333-3333333</term>
              </group>
              <group id="CCC" name="WorkingStatus">
                <term id="HasAJob">Unknown</term>
                <term id="Where">Unknown</term>
              </group>
            </client>
          </clients>

編輯:您可以檢查v在調試器中:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM