Подтвердить что ты не робот

Означает ли XML порядок порядка?

XML иногда меня путает, но я пытаюсь понять это. То, что говорит продавец, не имеет смысла, но опять же, XML, и я не лажусь:)

У меня есть XML, который я отправляю на веб-службу поставщика, которая дает мне случайные сбои:

<root>
    <Request>
        <Driver id="1" VehId="1">...</Driver>
        <Driver id="2" VehId="1">...</Driver>
        <Driver id="3" VehId="2">...</Driver>
        <Vehicle id="1">...</Vehicle>
        <Vehicle id="2">...</Vehicle>
        <Driver id="4" VehId="2">...</Driver>
    </Request>
</root>

Нет XSLT или XSD для сравнения, чтобы проверить, действительно ли мой XML.

Поставщик заявляет, что XML недействителен, потому что драйвер №4 находится в неправильной области. XPath for Driver должен быть root/Request/Driver, а Vehicle - root/Request/Vehicle.

Общеизвестно, что синтаксические анализаторы XML будут вынуждать порядок элементов, особенно если XSD не сравнивает XML? Поддержка поставщиков медленно возвращается со мной, поэтому я хочу знать, какая хорошая практика.

Followup

Я достаточно пожаловался на репутацию нашего аккаунта о том, что не смог проверить это (и заставило его звучать так, как будто они просто пытались получить деньги на поддержку), что выясняется, что разработчики имеют XSD, но поддержка этого не делает. Поэтому я разговаривал с неправильной группой * facepalm *

Я получил XSD, и он применяет определенный порядок элементов.

Теперь, чтобы сразиться с ними по отношению к их собственному образцу, XML не следует схеме, но по крайней мере сейчас у меня есть что протестировать.

4b9b3361

Ответ 1

Если XSD (XML-схема) отсутствует, то все, что вы можете проверить, это то, правильно ли сформирован ваш XML.

В вашем случае - это так. Не существует совпадающих тегов XML, без тега XML, которые остаются открытыми или что-либо в этом роде.

Если поставщику необходимо обеспечить соблюдение таких правил, как порядок внутри XML, он должен предоставить файл XSD, иначе его "требования" не могут быть проверены и проверены....

Ответ 2

Компоновщик XML-схемы "sequence" будет обеспечивать порядок

Я знаю, что это старый, но я только что пришел на должность.

До сегодняшнего дня я бы, скорее всего, ответил на вопрос: Does XML care about the order of elements? с No, unless you use a poorly written xml parser.

Однако сегодня стороннее приложение пожаловалось, что созданные мной xml файлы недействительны. Они используют XSD файл для проверки XML. И да, вы можете применить порядок или элементы в файле xsd:

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="ComplexType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" default="" name="Value1" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" default="" name="Value2" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Ключевое слово: xs:sequence

Элемент sequence указывает, что дочерние элементы должны появляться в последовательности. Каждый дочерний элемент может встречаться от 0 до любого количества раз.

что в отличие от xs:all что не заботится о порядке, но допускает только элементы, которые встречаются ноль или один раз.

Указывает, что дочерние элементы могут появляться в любом порядке. Каждый дочерний элемент может встречаться 0 или 1 раз

(Слова sequence и all это как то, что называется Compositor в определении схемы XML.)

Ответ 3

Поставщики будут делать то, что они будут делать, но это нестандартное приложение XML, чтобы полагаться на упорядочение.

XML является декларативным, а не процедурным. Таким образом, это не должно быть "ступенчато".

Ответ 4

Схемы XML могут обеспечивать порядок элементов. Если нет схемы, ни порядок, ни теги, ни общая структура, а не тип текста (если это число или что-либо) предписывается каким-либо образом - теоретически. Конечно, это не так.

Совершенно возможно разбирать * данные из XML без заботы о порядке, но это может быть проще (например, при использовании SAX, я думаю, или когда вы ленивый ублюдок, пишущий очень неряшливый код), чтобы разобрать, если вы примете определенный порядок. Хотя они должны включать некоторую схему, если они хотят определенного порядка, вполне возможно, что их парсер все равно задыхается. Да, они не должны этого делать, но, очевидно, им все равно.

* Под "разбором" я не имею в виду "взять этот XML-документ и превратить его в, например, DOM", но "возьмите это, например, DOM и извлеките из него информацию".

Ответ 5

Схема XML может или не может содержать порядок элементов. Это зависит от рассматриваемой схемы. В самом общем смысле порядок XML-элементов не имеет значения, если иное не предусмотрено соответствующей схемой.

Ответ 6

Доступ к XML с помощью DOM сохраняет порядок узлов так, как они есть в вашем XML-документе. Смотрите здесь:

http://www.w3schools.com/dom/dom_nodes_nodelist.asp

там вы найдете:

Объект списка node представляет список узлов в том же порядке, что и в XML.

Если ваш веб-сервис полагается на заказ, это другой вопрос - он может или не может быть, это зависит от реализации веб-службы.

Ответ 7

Хорошо, я думаю, что лучший ответ - спросите их. Они даже могут анализировать ваш XML как текстовый файл, поэтому вам могут потребоваться разрывы строк и некоторый "правильный" порядок атрибутов.

Если они будут разбирать этот правильный порядок, это не имеет значения (по крайней мере, не с точки зрения действительных запросов). Как я вижу, они должны построить две таблицы и объединить их с предоставленными идентификаторами.