【问题标题】:Create dynamic xml using xelement in c#在c#中使用xelement创建动态xml
【发布时间】:2017-07-09 05:11:06
【问题描述】:

如您所见,我想使用XElement 创建xml:

XDocument RejectedXmlList = new XDocument
(
    new XDeclaration("1.0", "utf-8", null)
);
int RejectCounter = 0;

foreach (Parameter Myparameter in Parameters)
{
    if (true)
    {
        XElement xelement = new XElement(Myparameter.ParameterName, CurrentData.ToString());
        RejectedXmlList.Add(xelement);
    }
}

您可以看到条件是否正常,应将参数添加到RejectedXmlList,但我得到了这个异常:

This operation would create an incorrectly structured document.

注意,第一个参数添加成功。只有在添加第二个时,我才会得到异常。

预期的结果应该是这样的:

<co>2</co>
<o2>2</o2>
....

【问题讨论】:

  • 看起来像 Creating an XDocument properly 的副本 - 您正在尝试创建一个包含多个 root elements 的 XML 文档,这是 XML 标准所不允许的。
  • @dbc 这不是我的答案。我想使用 foreach 创建 xml
  • 同样的问题。您必须将单个根元素添加到您的 XDocument。然后,您可以为每个 Parameter 添加多个子元素到该根元素。
  • 我添加了这一行 RejectedXmlList.Root.Add("Rejectedparameters");在我的代码的第一行,但它返回空引用错误。
  • 当然——您需要创建RejectedXmlList.Root 元素。您只创建了XDocument,而不是它的根。

标签: c# xml xelement


【解决方案1】:

您正在尝试创建一个具有多个root elementsXDocumentParameters 中的每个Parameter 一个您不能这样做,因为XML standard 不允许这样做:

只有一个元素,称为根或文档元素,它的任何部分都不会出现在任何其他元素的内容中。

LINQ to XML API 强制执行此约束,当您尝试向文档添加第二个根元素时抛出您看到的异常。

相反,添加一个根元素,例如&lt;Rejectedparameters&gt;,然后将您的 xelement 孩子添加到其中:

// Allocate the XDocument and add an XML declaration.  
XDocument RejectedXmlList = new XDocument(new XDeclaration("1.0", "utf-8", null));

// At this point RejectedXmlList.Root is still null, so add a unique root element.
RejectedXmlList.Add(new XElement("Rejectedparameters"));

// Add elements for each Parameter to the root element
foreach (Parameter Myparameter in Parameters)
{
    if (true)
    {
        XElement xelement = new XElement(Myparameter.ParameterName, CurrentData.ToString());
        RejectedXmlList.Root.Add(xelement);
    }
}

示例fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多