<?xml version="1.0" ?>
<aliasSection>
<aliases>
<clear />
<add
name="MAIN"
server="JAG8MTO\SQLEXPRESS"
database="RMain"
trustedConnection="false" />
<add
name="DEMO"
server="JAG8MTO\SQLEXPRESS"
database="RDemo"
trustedConnection="false" />
</aliases>
</aliasSection>
在上面的xml doc中,我需要搜索别名,然后返回服务器和数据库属性。
这是我第一次使用xml文档时,我很难绕过它。
到目前为止,我有这个,我可以找到别名部分,但我不知道从这里开始。
public void Read(string fileName)
{
XDocument doc = XDocument.Load(fileName);
foreach (XElement el in doc.Root.Elements())
{
foreach (XAttribute attr in el.Attributes())
if (attr.ToString() == "aliases")
{
foreach (XElement element in el.Elements())
listBox1.Items.Add(element.Name + " " + element.Value);
foreach (XAttribute attrib in el.Attributes())
listBox1.Items.Add(attrib.Value);
}
}
}
答案 0 :(得分:1)
aliases
是元素,而不是属性
var document = XDocument.Load(fileName);
var data =
document.Descendants("aliases") // Select all <aliases> elements
.SelectMany(alias => alias.Elements("add")) // select all <add> elements
.Select(add => new
{
Name = add.Attribute("name").Value
Server = add.Attribute("server").Value
})
.ToList();
listBox1.Items.AddRange(data);
data
将包含所有<add>
元素的选定值。
foreach (var item in data)
{
Console.WriteLine($"Name: {item.Name}, Server: {item.Server}");
}
答案 1 :(得分:1)
// Load the xml into XElement
XDocument doc = XDocument.Load("F:\\db.xml",LoadOptions.None);
// Search through descendants and
// find one with name as MAIN
XElement result = doc.Descendants("add")
.FirstOrDefault(y => y.Attribute("name") != null &&
y.Attribute("name").Value == "MAIN");
// Get the values if valid element is found
if(result != null)
{
string server = (result.Attribute("server") != null) ? result.Attribute("server").Value : string.Empty;
string database = (result.Attribute("database") != null) ? result.Attribute("database").Value : string.Empty;
}