【问题标题】:Linq to XML with VB.NET使用 VB.NET 将 Linq 转为 XML
【发布时间】:2014-11-29 23:36:16
【问题描述】:

我正在尝试掌握 Linq to XML - 来自 MSXML。我想在以下 XML 中循环包含在“根”中的所有元素,返回元素名称和每个属性的值。

XML:

<Root>
    <April Target="55" Forecast="30" Result="30"/>
    <May Target="98" Forecast="67" Result="84"/>
    <June Target="133" Forecast="109" Result="119"/>
    <July Target="183" Forecast="146" Result="150"/>
    <August Target="239" Forecast="182" Result="188"/>
    <September Target="278" Forecast="211" Result="217"/>
    <October Target="320" Forecast="251" Result="489"/>
    <November Target="372" Forecast="281" Result="489"/>
    <December Target="386" Forecast="324" Result="489"/>
    <January Target="420" Forecast="352" Result="489"/>
    <February Target="464" Forecast="384" Result="489"/>
    <March Target="524" Forecast="445" Result="489"/>
</Root>

例如,对于循环的每次迭代,我希望能够填充以下变量:

MonthName = Taken from the element name
Target = Taken from the attribute value
Forecast = Taken from the attribute value
Result = Taken from the attribute value

我已设法按如下方式加载文档:

Dim xDoc As New XDocument
        xDoc = XDocument.Load("C:\Users\Major\Documents\Visual Studio 2013\Dashboard\XML\YTD - Copy.xml")

但我能找到的所有代码都与获取具有特定名称的元素有关,我想在其中循环 Root 的所有子项

【问题讨论】:

  • 使用xDoc.Elements("Root").Elements()即可,如果不需要特定名称,则无需指定名称。没有发布作为答案,因为我对 VB.NET 的了解不足以编写任何好的示例代码。

标签: xml wpf vb.net linq


【解决方案1】:
Dim xDoc = <Root>
               <April Target="55" Forecast="30" Result="30"/>
               <May Target="98" Forecast="67" Result="84"/>
               <June Target="133" Forecast="109" Result="119"/>
               <July Target="183" Forecast="146" Result="150"/>
               <August Target="239" Forecast="182" Result="188"/>
               <September Target="278" Forecast="211" Result="217"/>
               <October Target="320" Forecast="251" Result="489"/>
               <November Target="372" Forecast="281" Result="489"/>
               <December Target="386" Forecast="324" Result="489"/>
               <January Target="420" Forecast="352" Result="489"/>
               <February Target="464" Forecast="384" Result="489"/>
               <March Target="524" Forecast="445" Result="489"/>
           </Root>

For Each node In xDoc.Elements()
    Console.WriteLine(node.Name)

    For Each attr In node.Attributes
        Console.WriteLine("{0} = {1}", attr.Name, attr.Value)
    Next
Next

【讨论】:

    【解决方案2】:

    你可以用这个:-

    Dim xdoc As XDocument = XDocument.Load("Your_Data.xml")
    Dim result = (From d In xdoc.Root.Elements()
                       Select New With {.MonthName = d.Name.LocalName,
                                        .Target = d.Attribute("Target").Value,
                                        .Forecast = d.Attribute("Forecast").Value,
                                        .Result = d.Attribute("Result").Value}).ToList()
    

    然后您可以简单地使用For Each 循环来遍历结果:-

    For Each output In result
       Console.WriteLine("Month: {0},Target: {1}, Forecast: {2}, Result: {3}", output.MonthName, output.Target, output.Forecast, output.Result)
    Next
    

    【讨论】:

    • 您好,感谢您的回复。然后如何从列表中取出数据?
    • @JiminyCricket - 您可以简单地使用循环,请查看我的更新。
    【解决方案3】:

    感谢大家的回答。我发现最简单的路线如下:

    xDoc = XDocument.Load("XML Path Here")
    Dim MonthNodes As IEnumerable(Of XElement) = xDoc.Element("Root").Descendants
    
            For Each MonthNode As XElement In MonthNodes
                Debug.Print(MonthNode.Attribute("Target").Value)
            Next
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      相关资源
      最近更新 更多