Скрипт, который проверяет структуру фида .xml - PullRequest
0 голосов
/ 11 мая 2019

Мы строим сайт сравнения цен.Для интеграции магазинов с нашим сайтом мы используем .xml файл (feed).

Файл канала имеет особую структуру, которая необходима для правильного импорта товаров на наш сайт.

Что нам нужно:

Как мы можем написатьскрипт, который будет проверять правильность предоставления файла .xml.

пример:

наш фид файла имеет требуемую структуру, такую ​​как:

<offers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1">
<o id="2576" url="https://urlshop.com/catalog/product/view/id/2576/s/jazz-2044-410-charcoal-pink/" price="390" avail="1" set="0" weight="2.0000" basket="1" stock="2">
<cat>
<![CDATA[ SHOES MEN > Sneakers ]]>
</cat>
<name>
<![CDATA[ Saucony JAZZ_2044 ]]>
</name>
<imgs>
<main url="https://urlshop.pl/pub/media/catalog/product/2/9/292864.jpg"/>
<i url="https://urlshop.pl/pub/media/catalog/product/2/9/292864_1.jpg"/>
<i url="https://urlshop.pl/pub/media/catalog/product/2/9/292865_1.jpg"/>
<i url="https://urlshop.pl/pub/media/catalog/product/2/9/292866_1.jpg"/>
<i url="https://urlshop.pl/pub/media/catalog/product/2/9/292867_1.jpg"/>
<i url=""/>
</imgs>
<desc>
<![CDATA[
New product with tags.
]]>
</desc>
<attrs>
<a name="Brand">
<![CDATA[ Saucony ]]>
</a>
<a name="product_code">
<![CDATA[ JAZZ_2044_410_CHARCOAL-PINK ]]>
</a>
<a name="Size">
<![CDATA[ 41, 42, 42.5, 43, 44, 44.5, 45, 46 ]]>
</a>
</attrs>
</o>
</offers>

Нам нужен сборщик проверок, когда клиент помещает ссылку в URL для проверки в ленту новостей, и если лента имеет такую ​​же структуру, как указано выше, то возвращает: XML-файл верен!

Если файл имеет другую структуру, возвращаетошибка.

@ update

Хорошо, но теперь как интегрировать этот код с простой формой, такой как:

<form action="/action_page.php">
  <fieldset>
    <legend>Validation XML Feed:</legend>
    Url to .xml file: <input type="url" name="firstname" value="">
    <input type="submit" value="Submit">
  </fieldset>
</form>

enter image description here

1 Ответ

1 голос
/ 11 мая 2019

Обычный подход состоит в том, чтобы написать схему (XSD), которая описывает структуру, а затем проверить экземпляр на соответствие схеме.Существует ряд инструментов разработки XML, которые сгенерируют схему первого среза из экземпляра (хотя она никогда не будет точно содержать все правила).Вот что генерирует oXygen для вашего экземпляра документа:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="offers">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="o"/>
      </xs:sequence>
      <xs:attribute name="version" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="o">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="cat"/>
        <xs:element ref="name"/>
        <xs:element ref="imgs"/>
        <xs:element ref="desc"/>
        <xs:element ref="attrs"/>
      </xs:sequence>
      <xs:attribute name="avail" use="required" type="xs:integer"/>
      <xs:attribute name="basket" use="required" type="xs:integer"/>
      <xs:attribute name="id" use="required" type="xs:integer"/>
      <xs:attribute name="price" use="required" type="xs:integer"/>
      <xs:attribute name="set" use="required" type="xs:integer"/>
      <xs:attribute name="stock" use="required" type="xs:integer"/>
      <xs:attribute name="url" use="required" type="xs:anyURI"/>
      <xs:attribute name="weight" use="required" type="xs:decimal"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="cat" type="xs:string"/>
  <xs:element name="name" type="xs:string"/>
  <xs:element name="imgs">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="main"/>
        <xs:element maxOccurs="unbounded" ref="i"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="main">
    <xs:complexType>
      <xs:attribute name="url" use="required" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="i">
    <xs:complexType>
      <xs:attribute name="url" use="required" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="desc" type="xs:string"/>
  <xs:element name="attrs">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="a"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="a">
    <xs:complexType mixed="true">
      <xs:attribute name="name" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Конечно, здесь есть догадки.То, что ни один из ваших атрибутов a/@name не содержит пробелов, не означает, что пробелы не допускаются.

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