根据值选择XML元素

时间:2015-05-26 19:08:20

标签: c# xml vb.net linq select

我有简单的XML。我想选择CASE,其中Section =" A"由LINQ在VB.NET中的WindowsForm应用程序。我将不胜感激任何帮助。提示可以在C#中。谢谢。

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <PredefinedText>
        <Section>A</Section>
        <CASE>Case 1A</CASE>
    </PredefinedText>
    <PredefinedText>
        <Section>B</Section>
        <CASE>Case 1B</CASE>
    </PredefinedText>
</data>

我有这段代码,但它没有将任何记录返回给ComboBox ......

sSettingsFilePath = "Sections.xml"

Dim xelement As XElement = xelement.Load(sSettingsFilePath)

ComboBox1.DataSource = (From cases In xelement.Elements("PredefinedText") _
                            Select cases.Element("CASE").Value _
                            Where xelement.Element("PredefinedText").Element("Section").Value = "A"
                            Order By Value).ToList()

4 个答案:

答案 0 :(得分:1)

问题是xelement已经是PredefinedText,因此xelement.Element("PredefinedText").Element("Section").Value永远不会返回现有对象(PredefinedText没有子PredefinedText}。 所以只需将您的陈述转换为:

ComboBox1.DataSource = (From cases In xelement.Elements("PredefinedText") _
                            Select cases.Element("CASE").Value _
                            Where xelement.Element("Section").Value = "A"
                            Order By Value).ToList()

看起来更加用户友好的第二个选项是编写如下代码:

xelement.Elements("PredefinedText")
                .Where(x => x.Element("Section").Value == "A")
                .OrderBy(x=>x.Value);

答案 1 :(得分:0)

试试这个:

XDocument xDoc = XDocument.Load("fullfilepath.xml");
var qry = xDoc.Root.Descendants("Section")
    .Where(ele=>ele.Element("PredefinedText").Value=="A") //or StartsWith("A") or Contains("A")
    .OrderBy(ele=>ele.Value)
    .ToList();

有关详细信息,请参阅:
XDocument.Load Method
Samples (LINQ to XML)

答案 2 :(得分:0)

...试

sSettingsFilePath = "Sections.xml"
Dim doc As XDocument = XDocument.Load(new FileStream(sSettingsFilePath, FileMode.Open))
ComboBox1.DataSource = (From x In doc.root.Elements("PredefinedText")
                        Where x.Element("Section").Value = "A"
                        Select x.Element("CASE").Value).ToList()

答案 3 :(得分:0)

用于选择CASE元素,

ComboBox1.DataSource = xelement
                           .Descendants("PredefinedText")
                           .Where(i => i.Element("Section").Value == "A")
                           .Select(j => j.Element("CASE").Value);