首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造xml文件:这个文档已经有一个‘DocumentElement’节点

构造xml文件:这个文档已经有一个‘DocumentElement’节点
EN

Stack Overflow用户
提问于 2016-04-04 08:14:10
回答 1查看 2K关注 0票数 0

我正在尝试构造表单的.xml文件。

代码语言:javascript
复制
<Orders>
    <Id type="System.Int32">1</Id>
    <OrderItems>
        <OrderItem>
            <Id type="System.Int32">321</Id>
            <Product type="System.String">Coffee</Product>
        </OrderItem>
    </OrderItems>
    <Client type="System.String">Johnny</Client>
<Orders>

对于Order模型:

代码语言:javascript
复制
public class Order
{
    public int Id { get; set; }
    public List<OrderItem> Products { get; set; }
    public string Client { get; set; }
}

在这里,我创建了Order元素

代码语言:javascript
复制
public void SaveToFile(IEnumerable<Order> elementsList)
    {
        XmlDocument xmlDoc = new XmlDocument();
        XmlDeclaration xmlDec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", string.Empty);
        xmlDoc.PrependChild(xmlDec);
        XmlElement elemRoot = xmlDoc.CreateElement("Orders");
        xmlDoc.AppendChild(elemRoot);
        XmlHelper<Order> xmlHelper = new XmlHelper<Order>();
        foreach (var order in _orders)
        {
            xmlHelper.AddNodeToXmlDocument(xmlDoc, elemRoot, order);
        }
        xmlDoc.PreserveWhitespace = true;
        xmlDoc.Save(_filePath);
    }

在这里,我试图构造子元素。对于Id和客户端,它可以正常工作,但是当我尝试创建订单项时,我在document.AppendChild(elemRoot);行中得到了这个错误

代码语言:javascript
复制
public void AddNodeToXmlDocument(XmlDocument document, XmlElement rootElement, object myObject)
    {
        XmlElement myObjectElement = document.CreateElement(EntityFormatter.GetObjectName(myObject));
        foreach (var objectProperty in EntityFormatter.GetPropertiesAndValues(myObject))
        {
           if ((objectProperty.Value.GetType().FullName).ToString().Contains("System.Collections.Generic.List"))
            {
                Regex regex = new Regex(@"Models[.][A-Za-z]+");
                Match match = regex.Match(objectProperty.Value.ToString());
                var elemRoot = document.CreateElement(match.Value.Substring(7));
                document.AppendChild(elemRoot);
                foreach (var obj in objectProperty.Value.ToString())
                {
                    AddNodeToXmlDocument(document, elemRoot, obj);
                }
            }
            else
            {
                var elem = document.CreateElement(objectProperty.Key);
                elem.SetAttribute("type", objectProperty.Value.GetType().FullName);
                elem.InnerText = objectProperty.Value.ToString();
                myObjectElement.AppendChild(elem);
            }
        }
        rootElement.AppendChild(myObjectElement);
    }
EN

回答 1

Stack Overflow用户

发布于 2016-04-04 08:41:51

XML规范只允许文档中的单个根元素。document.AppendChild(elemRoot)方法中的AddNodeToXmlDocument()行抛出异常,因为根元素以前在SaveToFile()方法中创建过:

代码语言:javascript
复制
.....
XmlElement elemRoot = xmlDoc.CreateElement("Orders");
xmlDoc.AppendChild(elemRoot);
.....

现在还不清楚您试图用错误的行做什么,也许您想将elemRoot附加到先前创建的根元素中:

代码语言:javascript
复制
.....
var elemRoot = document.CreateElement(match.Value.Substring(7));
document.DocumentElement.AppendChild(elemRoot);
.....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36397545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档