В настоящее время я добавляю элементы в свой XmlDocument, используя нотацию XPath, для которой я написал код, который помещает элемент в нужное место в файле. За одним исключением. Я не знаю, как заставить его обратить внимание на правила последовательности, определенные в моем файле XSD.
Есть ли способ добавить элемент в XmlDocument, чтобы он соответствовал последовательности, определенной в XSD, которая управляет моим XML-файлом?
Например, мой XML-документ должен выглядеть так:
<rootTag>
<area name="I define an area">
<description>some text here</description>
<point x="1" y="1" />
<point x="2" y="2" />
<point x="3" y="3" />
</area>
</rootTag>
Еще я получаю, в зависимости от порядка, в котором пользователь вводит значения для дочерних тегов выше:
<rootTag>
<area name="I define an area">
<point x="1" y="1" />
<point x="2" y="2" />
<point x="3" y="3" />
<description>some text here</description>
</area>
</rootTag>
Чтобы исправить вышесказанное, я создаю DataSet (с именем tempXmlDataset) из файла XSD. Я передаю содержимое XmlDocument в tempXmlDataset, и все соответствующим образом переупорядочивается.
Однако моя проблема вызвана опцией для первого дочернего элемента XML-документа. Эта опция определена в XSD, чтобы разрешить объекты "площадь", "линия" или "точка". «area» и «line» оба имеют «точечные» элементы как дочерние. Но дочерняя «точка» - это не то же самое, что «точечный» объект. Итак, как вы, возможно, уже поняли, tempXmlDataset.ReadXmlSchema (...) создает «точечную» таблицу, в которой есть только x и y. Это по определению детей для "области" и "линии".
Поэтому, когда мой код запускает tempXmlDataset.ReadXml (...), атрибуты для объекта «точка» не считываются, потому что он видит объект «точка» как дочернюю «точку». Вот пример «точечного» объекта:
<rootTag>
<point name="I define a point" x="3" y="3" otherAttributes="">
<description>some text here</description>
</point>
</rootTag>