这个问题一定很容易,但我遇到了一个我无法处理的问题。 无论我尝试什么,我都无法使用linq解析此xml并获取完整路径值。 错误是“无法找到路径。”
XDocument doc = XDocument.Load(@"All.xml");
![在此处输入图片说明] [1] 我该如何解决? 如何在C#中获取xml信息?
感谢
的xml:
<?xml version="1.0" encoding="utf-8" ?>
<content contentType="REPLY">
<submitInfo>
<setting name="a1" info ="openit" path ="examplefin.c" serializeAs="String">
<add name="a11" value="example1.c"/>
<add name="a12" value="example2.c"/>
<value />
</setting>
</submitInfo>
</content>
代码:
XmlTextReader reader = new XmlTextReader("All.xml");
XDocument doc = XDocument.Load(@"All.xml");
reader.Read();
//get setting info
var qname = from xElement in doc.Element("submitInfo").Elements("")
from p in doc.Element("setting").Elements("")
select p;
foreach (var t1 in qname)
{
Console.WriteLine(t1 + "");
}
var qqname = from q in qname
where q.Attribute("name").Value == "setting"
select q.Attribute("info","path");
foreach (var t2 in qqname)
{
Console.WriteLine(t2 + "");
}
//get add info
var qqqname = from p in qname
where p.Attribute("name").Value == "add"
select p.Attribute("value");
foreach (var t3 in qqqname)
{
Console.WriteLine(t3 + "");
}
答案 0 :(得分:1)
错误是&#34;无法找到路径。&#34;
首先:由于XDocument,您不再需要XmlReader。见附图:
如果您的xml文件无法成功加载,请确保您的xml文件位于您的exe文件所在的位置(请设置xml文件&#34;复制到本地&#34; = true)。
如果您的xml文件分析有任何问题,请:
var qname = from xElement in doc.Element("submitInfo").Elements()
from p in doc.Element("setting").Elements()
select p;
请注意&#34;元素&#34;没有空字符串,因为这意味着你将读取元素的名称(没有xml标记名称为空!):
至于您的真实xml内容,请更改为以下内容:
XDocument doc = XDocument.Load(@"XMLFile.xml");
//get all the sub elemens under the "setting" tag:
var qnames = from p in doc.Element("submitInfo").Element("setting").Elements("add")
select p;
foreach(var add in qnames)
{
………………
}
var settingElement = doc.Element("submitInfo").Element("setting"); //Get the "setting" element.
//get "value" tag
var valueElement = doc.Element("submitInfo").Element("setting").Element("value");
答案 1 :(得分:1)
关于您的第一个问题,这是文件放置的问题,除了您需要确保您的文件位于bin\debug
或bin\release
文件夹之外,我无法告诉您(或者你工作的目录)。
至于阅读XML,您可以将它全部解析为匿名类型并使用它们。这可能会更容易。如果你想打扰它们,混凝土类型也有优势。
var file = XElement.Load(path);
var submitInfos = file.Elements("submitInfo")
.Select(submitInfo =>
{
Settings = submitInfo.Elements("setting")
.Select(setting =>
{
name = setting.Attribute("name").Value,
info = setting.Attribute("info").Value,
path = setting.Attribute("path").Value,
serializeAs = setting.Attribute("serializeAs").Value,
values = setting.Elements("add")
.ToDictionary(c => c.Attribute("name").Value, c => c.Attribute("value").Value)
})
});
当然,这还没有编译,但它应该让你开始。然后,您可以直观地使用它。