【问题标题】:C# Parsing/Saving XML DocumentsC# 解析/保存 XML 文档
【发布时间】:2013-11-11 04:45:48
【问题描述】:

我的任务听起来很简单,但事实证明非常困难。我有一个如下的 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 Element 对象。将它们存储在 XML 元素的列表或数组中。

//Create new document
var document = new XmlDocument();
document.Load("C:\\Users\\liam.mccann\\Documents\\test.xml");

在加载后我没有成功获得每个元素似乎只能获得第一个。

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

解析后,我希望很容易重组文档并再次保存。文件也一样。

希望有人能够提供帮助!

【问题讨论】:

    标签: c# xml asp.net-mvc arrays xml-parsing


    【解决方案1】:

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

    您可以执行以下操作:

    var array = document.SelectNodes("/descendant-or-self::*")
                        .OfType<XmlElement>()
                        .ToArray();
    

    话虽如此,如果您只想:

    解析后我希望很容易重组文档并 再次保存。

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

    这是 MSDN 文档,希望可以帮助您入门:http://msdn.microsoft.com/en-us/library/bb387084%28v=vs.110%29.aspx

    【讨论】:

    • 我在选择节点行上得到一个“可能对标有非空属性的实体的空分配”
    • 这意味着您正在使用 Resharper:先生,您更值得称赞。如上所述,答案只是表明这是可能的,尽管我仍然不相信这是最好的方法。如果您有兴趣使用以下代码,可以避免收到警告:var xmlNodeList = document.SelectNodes("/descendant-or-self::*"); if (xmlNodeList != null) { var array = xmlNodeList.OfType&lt;XmlElement&gt;().ToArray(); }
    • + 1 个很好的答案,唯一的就是!在从文件中读取它之后,就像你向 XML 元素数组建议的那样。是否可以在父子结构仍然存在的情况下保存它?
    • 取决于您所说的“就地”。该数组中的那些 XmlElements 只是对原始文档元素的引用;更改它们会修改该文档。如果您想保留原件的副本,您可以使用document.Clone() 为自己保存一份副本。
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 2020-07-10
    • 1970-01-01
    • 2020-03-26
    • 2018-07-22
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多