我们正在建立网站价格比较。为了使商店与我们的网站集成,我们使用.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>
答案 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
属性都不包含空格并不意味着不允许使用空格。