【问题标题】:How to create XML document from nested objects?如何从嵌套对象创建 XML 文档?
【发布时间】:2013-05-20 07:01:40
【问题描述】:

我想从具有嵌套对象的对象中创建一个包含嵌套元素的 xml 文档,但 xml 文件过于扁平。我怎样才能让它迭代对象中的对象以在元素中创建元素。

public object traverse(object pc, string xpath, XmlDocument xmldoc)
{
    IEnumerable enumerable = pc as IEnumerable;
    if (enumerable != null)
    {
        foreach (object element in enumerable)
        {
            RecurseObject ro = new RecurseObject();
            ro.traverse(elementArray, xpath, xmldoc);
        }
    }
    else
    {                         
        Type arrtype = pc.GetType();
        string elementname = arrtype.Name;
        foreach (var prop in pc.GetType().GetProperties())
        {

            XmlElement xmlfolder = null;
            XmlNode xmlnode3 = null;
            string propname = prop.Name;
            string propvalue = "null";
            if (xmldoc.SelectSingleNode(xpath + "/" + elementname) == null)
            {
                xmlnode3 = xmldoc.SelectSingleNode(xpath);
                xmlfolder = xmldoc.CreateElement(null, elementname, null);
                xmlnode3.AppendChild(xmlfolder);

            }
            if (prop.GetValue(pc, null) != null)
            {
                propvalue = prop.GetValue(pc, null).ToString();
            }

            xmlnode3 = xmldoc.SelectSingleNode(xpath + "/" + elementname);
            xmlfolder = xmldoc.CreateElement(null, propname, null);
            xmlfolder.InnerText = propvalue;
            xmlnode3.AppendChild(xmlfolder);
        }
    }

    return null;
}

【问题讨论】:

  • a)你的复杂对象怎么样b)最后你想得到什么样的xmlc) 你读过关于 xml 序列化的任何东西吗?
  • 即使在格式化代码之后,也不清楚您到底想要实现什么。添加输入数据和所需输出的示例。
  • I4V 是对的。您可以通过序列化从对象自动生成 XML

标签: c# xml object nested


【解决方案1】:

如 cmets 中所述,请注意 .NET 包含将对象图转换为 XML 的功能,而无需编写任何代码来生成 XML。这个过程称为序列化,应该很容易在网上或在 SO 上找到示例。

如果您希望完全控制流程并希望使用反射,Fasterflect 包含将对象图转换为 XML 的代码。这是一个带有帮助器的库,可以使反射更容易和更快。您可以在this source file 中找到 XML 扩展的代码。请注意,引用的实现确实会检测或处理循环引用,而内置的序列化机制会。

至于您自己的解决方案,您似乎没有任何代码来检测属性值本身是对象还是原始值。您还需要为对象属性递归调用 traverse 方法,以便处理整个对象图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多