Вывести информацию о последовательности xsd после простого элемента с набором данных - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю с xsd.exe, чтобы создать класс DataSet для vb. net. Все выходные данные содержатся в этом DataSet, поэтому я могу использовать метод DataSet.writexml(writer as XMLWriter) для вывода данных в файл.

Изначально я хотел вывести xml данные в следующем шаблоне:

<customoutput>
    <zzz>Serial</zzz>
    <www1>Info1</www1>
    <www2>Info2</www2>
    <wwwn>Infon</wwwn>
</customoutput>

Поэтому я подумал, что описание последовательности <www/> совершенно невозможно, потому что имена узлов должны быть stati c.

По этой причине я решил попробовать вывести это XML:

<customoutput>
    <zzz>Serial</zzz>
    <www value="1">Info1</www>
    <www value="2">Info2</www>
    <www value="n">Infon</www>
</customoutput>

Поэтому я создаю XSD-файл для создания этого xml. Я сделал это из-за недостатка знаний XSD в Visual Studio автоматически

        <xs:element name="customoutput">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="zzz" type="xs:string" />
              <xs:element maxOccurs="unbounded" name="www">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute name="value" type="xs:string" use="required" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

Странная вещь: используя DataSet.writexml(writer as XMLWriter), я получаю вывод:

<customoutput>
    <zzz>Serial</zzz>
</customoutput>
<www value="1">Info1</www>
<www value="2">Info2</www>
<www value="n">Infon</www>

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Ваш XSD будет намного проще, если вы опустите порядковый номер. Я бы определил содержимое сложного типа как последовательность и разрешил бы повтор тега «Info» (maxOccurs="unbounded"). Последовательность схемы XML неявно упорядочена, поэтому порядковые номера не требуются. Тогда вы можете использовать свою оригинальную технику и поделиться XSD.

0 голосов
/ 11 февраля 2020

Использование xml linq:

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



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

            XElement output = new XElement("customoutput", new object[] {
                new XElement("zzz", "Serial"),
                new XElement("www", new object[] { new XAttribute("value", 1), "Info1"}),
                new XElement("www", new object[] { new XAttribute("value", 2), "Info2"}),
                new XElement("www", new object[] { new XAttribute("value", "n"), "Infon"})
            });
            output.Save(FILENAME);
        }
    }
}
...