Заботится ли XML о порядке элементов? - PullRequest
30 голосов
/ 01 декабря 2010

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 для драйвера должен быть root / Request / Driver, а Vehicle является root / Request / Vehicle.

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

Followup

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

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

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

Ответы [ 7 ]

22 голосов
/ 15 июня 2016

Компоновщик 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.)

19 голосов
/ 01 декабря 2010

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

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

Если продавцу нужно навязать такие вещи, как порядок внутри XML, он должен предоставить XSD-файл, иначе его «требования» не могут быть проверены и проверены ...

3 голосов
/ 01 декабря 2010

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

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

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

3 голосов
/ 01 декабря 2010

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

XML декларативный, а не процедурный.Так что не должно быть "пошагово".

2 голосов
/ 01 декабря 2010

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

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

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

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

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

2 голосов
/ 01 декабря 2010

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

0 голосов
/ 02 декабря 2010

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

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

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