【问题标题】:Algorithm - create xml from structure算法 - 从结构创建 xml
【发布时间】:2012-03-15 16:47:49
【问题描述】:

我的数据库中有两个表 - 类别和食物。食物有 idCategory。 Category 有 id 和 idParentCategory。

从他们那里,我需要创建一个看起来像这样(或 xml)的字符串:

<?xml version="1.0">
<tree id="0">
    <item text="Category1">
        <item text="Food1"/>
        <item text="Food2"/>
    </item>
    <item text="Category2">
        <item text="Category1">
            <item text="Food3"/>
            <item text="Food4"/>
        </item>
        <item text="Category3">
            <item text="Food5"/>
            <item text="Food6"/>
        </item>
    </item>
</tree>

如何创建它?我尝试找到 id == 1 的类别,然后搜索其所有子项,但它非常复杂。有什么简单的方法吗?

一个类别可以有多个类别,但他们的孩子只能有食物。

【问题讨论】:

  • 您是否尝试过编写一个 sql 语句加入数据,然后将所有结果转储到您的字符串中?
  • 您想要“看起来像这样(不是 xml,而是字符串)”的东西,但您显示的是 XML。为什么不显示你想要的?你的第三张桌子在哪里?表之间是什么关系?
  • @jzworkman 我写了连接表格的Linq,但它有什么用?
  • 你的问题提到了三个表,但你只定义了两个,你的意思是什么?
  • @PeterMonks 我后来简化了它,但仍然保留了“三”这个词。我编辑了问题

标签: c# algorithm


【解决方案1】:

您可以从具有您想要的结构的对象中序列化它;但您首先必须创建您的对象。

见:Deserializing XML to Objects in C# 如果你不知道对象结构。

一旦你有了对象,就很容易序列化成 XML 字符串:

        XmlSerializer serializer = new XmlSerializer(typeof(THEOBJECT));
        string THEOBJECTXMLSTRING;

        using (var stream = new MemoryStream())
        {
            serializer.Serialize(stream, THEINSTANCEOFTHEOBJECT);
            stream.Seek(0, SeekOrigin.Begin);
            var sr = new StreamReader(stream);
            THEOBJECTXMLSTRING = sr.ReadToEnd();
        }

        return THEOBJECTXMLSTRING;

【讨论】:

  • 我知道如何序列化 xml 文件。我不知道如何序列化上面的xml文件。
  • 所以问题是从两个表创建对象和层次结构,而不是创建 XML?
  • 问题是在问题中创建 Xml。
  • 恐怕我不明白。我已经向您展示了如何从具有所需结构的对象 (THEOBJECT) 创建 XML 字符串。为了使用上面显示的方法,您必须 1. 创建一个与您的层次结构匹配的对象 (THEOBJECT),2. 使用表中的数据填充对象的实例 (THEINSTANCEOFTHEOBJECT)。
【解决方案2】:

您最好生成一个 XML 文档并尝试获取字节信息以便将其转换为字符串。否则不仅耗时,而且非常容易出错。

【讨论】:

  • 好的,如何生成xml文件?
猜你喜欢
  • 2011-04-14
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多