验证.xml提要的结构的脚本

时间:2019-05-11 14:18:49

标签: xml validation structure

我们正在建立网站价格比较。为了使商店与我们的网站集成,我们使用.xml文件(提要)。

提要文件具有特定的结构,才能将产品正确导入我们的网站。

我们需要什么:

我们如何编写脚本来验证提供的.xml文件的正确性。

示例:

我们的文件Feed具有所需的结构,例如:

<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 个答案:

答案 0 :(得分:1)

通常的方法是编写描述结构的架构(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属性都不包含空格并不意味着不允许使用空格。