Возможно ли иметь два DataTables с одинаковым именем в XML? - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы иметь два datatables с именем bndbox для отображения двух наборов координат, как показано в приведенном выше коде. Но я получил ошибку, потому что bndbox уже существует. Затем я создал object в надежде сохранить bndbox с object1 и object2, но это не сработало. Есть ли способ получить два datatables с одинаковым именем в dataset? Или это невозможно? Идеальный результат будет таким:

<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>

1 Ответ

0 голосов
/ 29 мая 2020

Вам нужен только один 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")
                });
            }
        }
    }
}
...