繁体   English   中英

向XML添加根元素

[英]Adding a root element to XML

我有一个具有以下结构的XML字符串:

<Element>
   <Property1>Something</Propert1>
   <Property2>SomethingElse</Property2>
</Element>
<Element>
   <Property1>Something2</Propert1>
   <Property2>SomethingElse2</Property2>
</Element>

我想将此序列化为List<Element> 我使用以下代码:

XmlSerializer xd = new XmlSerializer(typeof(T));

XDocument xdoc = XDocument.Parse(xmlStringToDesirialize);
T deserializedObject = xd.Deserialize(xdoc.CreateReader()) as T;

其中TList<Element> 我得到一个例外,说There are multiple root elements 我知道为什么会这样,但是我不确定该怎么做。

我当时想添加psudo-root元素(例如<Elements>可能是一个很好的解决方案,但是我不知道如何将其添加到已经拥有的XML文档中。 也许完全有替代解决方案。

编辑:为了完整起见,我添加了反序列化所需的完整解决方案的代码,以防万一有人需要它。

我创建了一个类:

[XmlRoot("myRoot", Namespace = "")]
public class MyRoot
{
   [XmlElement("Element", Namespace = "{The xmlns of the actual class}")]
   public List<Element> Elements {get; set;}

   public MyRoot()
   {
      Elements = new List<Element>();
   }
}

然后,按照@Richard的建议添加标签后,我反序列化此类。 希望这可以帮助某人。

我有一个XML字符串

不,你不会。 您可以将其称为“ XML片段”。 特别是因为没有单个根元素,所以它不是XML文档。 (没有诸如“无效的XML”之类的东西:它是有效的或不是XML)。

XML解析器需要XML文档。 但是XmlSeriailsie不仅是一种解析:它当然包括一个XML解析器,而且还希望从XML文档的内容生成一个对象图,并做出许多关于类型可用性和XML限制以匹配这些类型的假设

普通XML解析器最简单的方法是自己添加一个根元素。 例如。:

var xdoc = XDocument.Parse("<myRoot>" + theString + "</myRoot>");

但是,对于XML反序列化,您将需要修改可用的类型,以包括一个使用myRoot元素序列化然后包含相关信息的容器。

但是,考虑到示例XML,我看不到看起来像对象图的迹象。 为什么不使用解析的XML并使用解析器的API提取内容?

XML必须有1! 根元素。 因此,正如您在以<elements>作为根节点之前所说的那样,它是解决方案。 XML看起来像:

<Elements>    
    <Element>
       <Property1>Something</Propert1>
       <Property2>SomethingElse</Property2>
    </Element>
    <Element>
       <Property1>Something2</Propert1>
       <Property2>SomethingElse2</Property2>
    </Element>
</Elements>

为什么不创建一个元素然后将您的元素附加到该元素

XElement root = new XElement(“ root”);

然后将元素附加到它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM