我有简单的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()
答案 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);