Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C解析/保存XML文档_C#_Xml_Asp.net Mvc_Arrays_Xml Parsing - Fatal编程技术网

C# C解析/保存XML文档

C# C解析/保存XML文档,c#,xml,asp.net-mvc,arrays,xml-parsing,C#,Xml,Asp.net Mvc,Arrays,Xml Parsing,我的任务听起来很简单,但事实证明非常困难。我有一个如下所示的XML文件: <?xml version="1.0" encoding="UTF-8"?> <ref:ReferralDocument xmlns:ref="http://ref.com" xmlns:gen="http://ref.com" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:pbr="ref.com"

我的任务听起来很简单,但事实证明非常困难。我有一个如下所示的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<ref:ReferralDocument xmlns:ref="http://ref.com" xmlns:gen="http://ref.com"
                      xmlns:h="http://www.w3.org/1999/xhtml" xmlns:pbr="ref.com" 
                      xmlns:xsi="ref.com" schemaVersion="2.9">
 <ref:MessageDetails>
  <gen:TestID>
   <gen:IdValue>2412665651</gen:IdValue>
   <gen:IdScheme>Test</gen:IdScheme>
   <gen:IdType>Person</gen:IdType>
  </gen:TestID>
 </ref:MessageDetails>
 <gen:Name>
  <gen:StructuredName>
   <gen:GivenName>Test</gen:GivenName>
   <gen:FamilyName>Test</gen:FamilyName>
  </gen:StructuredName>
  <gen:NameType>Current Name</gen:NameType>
 </gen:Name>
</ref:MessageDataRef>
在加载之后,我还没有成功地获取每个元素,但似乎只能获取第一个元素

所以简单加载XML文档>>验证XML>>从第一个元素获取方案版本>>解析到XML元素列表

在解析之后,我希望可以很容易地重新构造文档并再次保存它。文件是一样的

希望有人能帮忙

我想将每个XML元素读入一个XML元素对象。作为商店 它们在XML元素的列表或数组中

//Create new document
var document = new XmlDocument();
document.Load("C:\\Users\\liam.mccann\\Documents\\test.xml");
您可以执行以下操作:

var array = document.SelectNodes("/descendant-or-self::*")
                    .OfType<XmlElement>()
                    .ToArray();
话虽如此,如果你只是想:

在解析之后,我希望可以很容易地重新构造文档和 再保存一次

然后将元素存储在数组中可能不是最佳方法。您可以使用XmlDocument类本身,或者更好地使用新的LINQ方法:System.Xml.LINQ.XDocument


以下是MSDN文档,希望能让您开始使用:。

我得到一个可能的空分配给在选择节点行上标记为not null属性的实体,这意味着您正在使用Resharper:先生,非常感谢您。如上所述,答案只是表明这是可能的,尽管我仍然不相信这是最好的方法。下面是一段代码,如果您对警告感兴趣,可以避免得到警告:var xmlNodeList=document.SelectNodes/genderant或self::*;如果xmlNodeList!=null{var array=xmlNodeList.OfType.ToArray;}+1很好的答案,唯一的问题是!从文件中读取后,如u所建议的XML元素数组。是否可以在父子结构仍然存在的情况下保存它?取决于您所说的“存在”是什么意思。该数组中的XmlElements只是对原始文档元素的引用;更改它们将修改该文档。如果要保留原始文件的副本,可以使用document.Clone保存副本。