无法从C#找到xml路径

时间:2014-09-07 05:38:39

标签: c# xml linq

这个问题一定很容易,但我遇到了一个我无法处理的问题。 无论我尝试什么,我都无法使用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 + "");
            }

2 个答案:

答案 0 :(得分:1)

  

错误是&#34;无法找到路径。&#34;

首先:由于XDocument,您不再需要XmlReader。见附图:

如果您的xml文件无法成功加载,请确保您的xml文件位于您的exe文件所在的位置(请设置xml文件&#34;复制到本地&#34; = true)。

enter image description here

Plz选择&#34;复制如果更新(如果较新则复制)&#34;

如果您的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\debugbin\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)
                                                               })
                              });

当然,这还没有编译,但它应该让你开始。然后,您可以直观地使用它。