Изменение порядка узлов XML в соответствии с определенной схемой - PullRequest
3 голосов
/ 28 января 2010

Я объединяю несколько файлов .xml вместе, и мне нужно взять определенные дочерние элементы из каждого документа .xml и поместить их в третий. И это нормально, но проблема в том, что тогда мои «дочерние» узлы находятся в несколько случайном порядке (ну, то, что я выбрал из первого файла, затем то, что я выбрал из 2-го), и файл схемы (.xsd ) определяет эти дочерние элементы как «последовательность» или xs:sequence, если вы предпочитаете. Таким образом, выходной файл больше не проходит проверку, потому что, хотя каждый файл имеет свои элементы в порядке, полученный файл не проходит.

Что мне интересно, так это то, что, поскольку у меня есть файл .xsd, и у меня есть «в основном» действительный файл .xml, есть ли способ в C # «переместить» все узлы в правильном порядке в соответствии с порядок определен в .xsd без особых проблем? Очевидно, я мог бы реализовать своего рода «сортировку», но я надеюсь, что есть что-то встроенное. Или, что еще лучше, встроенное слияние, которое делает это автоматически, также может сработать.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2010

Рассматривая требования, можно ли вам руководствоваться моделью XSD?

Вы бы загрузили XSD в класс XmlSchema. Теперь вы можете получить модель. Пройдя по дочерним узлам схемы, вы получите гарантированный порядок. Итак, в основном

  • собрать узлы из 3 под-документов и поместить их в рабочий документ (еще не целевой документ).
  • Выполнить структуру, определенную схемой, для создания целевого документа
  • Выберите узлы из рабочего документа на основе порядка узлов схемы (по имени элемента / namespace-uri) и поместите их в конечный целевой документ

Надеюсь, это поможет,

1 голос
/ 13 февраля 2010

Взгляните на XmlSchemaValidator Class . Класс Tihs выполняет проверку на основе push - он фактически сообщает вам, что будет дальше. Возможно, вы можете использовать это для изменения порядка XML. Я смог использовать его для создания образца XML, соответствующего схеме.

0 голосов
/ 01 февраля 2010

Если вы можете контролировать .xsd, может быть этот пост предлагает отправную точку.

Когда изменение схемы не вариант, вы все равно можете преобразовать свой XML в желаемую структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...