【问题标题】:Is it possible to have two DataTables with the same name in XML?XML中是否可以有两个同名的DataTables?
【发布时间】:2020-05-29 03:11:25
【问题描述】:

我想让两个datatables 称为bndbox 来显示2 组坐标,如上面的代码所示。但是我收到了一个错误,因为bndbox 已经存在。然后我创建了object,希望能够将bndboxobject1object2 保持在一起,但这不起作用。有没有办法在dataset 中获得两个同名的datatables?或者这是不可能的?理想的输出是这样的:

<annotation>
    <folder>Kangaroo</folder>
    <filename>00151.jpg</filename>
    <size>
        <width>503</width>
        <height>488</height>
        <depth>3</depth>
    </size>
    <object>
        <bndbox>
            <ID>1</ID>
            <xmin>209</xmin>
            <ymin>186</ymin>
            <xmax>294</xmax>
            <ymax>217</ymax>
        </bndbox>
    </object>
    <object>
        <bndbox>
            <ID>1</ID>
            <xmin>301</xmin>
            <ymin>163</ymin>
            <xmax>348</xmax>
            <ymax>178</ymax>
        </bndbox>
    </object>
</annotation>

【问题讨论】:

  • 您想将数据表序列化为 XML 吗?那是你要的吗?在您的问题的开头,您提到“上面的代码”,但您忘记粘贴您的代码。您是否尝试过将“对象”或“bndbox”放在列表中 - 例如List bndboxes(或类似的东西)。您的问题需要更准确。
  • DataSet Read/Write Xml 仅适用于简单的 XML 结构。您有一个复杂的 xml 文件,因此您不应该使用 DataSet 方法。而是使用 Net 中的其他 Xml 库之一。

标签: c# xml datatable


【解决方案1】:

您只需要一个包含多行的 bndbox。试试下面的 Xml Linq 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            DataTable dt = new DataTable("BndBox");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("xmin", typeof(int));
            dt.Columns.Add("ymin", typeof(int));
            dt.Columns.Add("xmax", typeof(int));
            dt.Columns.Add("ymax", typeof(int));

            foreach (XElement bndbox in doc.Descendants("bndbox"))
            {
                dt.Rows.Add(new object[] {
                    (int)bndbox.Element("ID"),
                    (int)bndbox.Element("xmin"),
                    (int)bndbox.Element("ymin"),
                    (int)bndbox.Element("xmax"),
                    (int)bndbox.Element("ymax")
                });
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 2011-07-22
    • 2018-02-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多