SimpleContet元素
作用:应用于complexType
,对它的内容进行约束和扩展
simplexContent
元素用于Complex元素里,用于限定
ComplexType的内容类型,表示
ComplexType`没有子元素,同时该ComplexType需要有属性,否则它就成为SimpleType了。
代码示例
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shoeSize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="sizing" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="us"></xs:enumeration>
<xs:enumeration value="europe"></xs:enumeration>
<xs:enumeration value="uk"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
extension表示这个元素类型
意思是:定义了个
shoeSize
元素,类型是decimal
,然后定义了一个属性sizing,是简单类型,取值范围是,us、europe、uk。
实现:类型都是标签里面的数据
<?xml version="1.0" encoding="UTF-8"?>
<shoeSize sizing="europe" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Users/a364482611/Desktop/Untitled1.xsd">22</shoeSize>
choice元素
作用:允许唯一的一个元素从一个组中被选择
属性:minOccurs
/maxOccurs
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="helloword" type="myType">
</xs:element>
<xs:element name="hello" type="xs:string"/>
<xs:complexType name="myType">
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="wo" type="xs:string"/>
<xs:element ref="hello"/>
</xs:choice>
</xs:complexType>
</xs:schema>
意思就是从choice
中抽出一个
<?xml version="1.0" encoding="UTF-8"?>
<helloword xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema1.xsd" >
<hello></hello>
</helloword>
然后修改maxOccurs为3
<?xml version="1.0" encoding="UTF-8"?>
<helloword xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema1.xsd" >
<hello></hello>
<hello></hello>
<wo></wo>
</helloword>
XML结果这样,maxOccurs真对choice这个整体来说的,没次抽取其中一个
sequence元素
作用:给一组元素一个特定的序列
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="helloword" type="myType">
</xs:element>
<xs:element name="hello" type="xs:string"/>
<xs:complexType name="myType">
<xs:sequence minOccurs="1" maxOccurs="3">
<xs:element name="wo" type="xs:string"/>
<xs:element ref="hello"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
同上面例子基本上差不多,只不过是必须按照顺序 wo hello这么出现、必须sequence里面的元素一起出现,不能缺少。
<?xml version="1.0" encoding="UTF-8"?>
<helloword xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema1.xsd" >
<wo></wo>
<hello></hello>
<wo></wo>
<hello></hello>
<wo></wo>
<hello></hello>
</helloword>
关于schema根元素
当我们定义完schema后、生成的XML代码是多种的,全靠用户自己去定义结果
代码示例
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="helloword" type="myType">
</xs:element>
<xs:element name="hello" type="xs:string"/>
<xs:complexType name="myType">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="wo" type="xs:string"/>
<xs:element ref="hello"/>
</xs:sequence>
</xs:complexType>
<xs:element name="word" type="myType">
</xs:element>
</xs:schema>
生成的xml代码有三种可能性
<?xml version="1.0" encoding="UTF-8"?>
<word xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema1.xsd" >
<wo></wo>
<hello></hello>
</word>
<?xml version="1.0" encoding="UTF-8"?>
<helloword xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema1.xsd" >
<wo></wo>
<hello></hello>
</helloword>
<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema1.xsd" >
</hello>
以上的结果都是正确的
PHP之DOMDocument对象
<?php
$dom=new DOMDocument('1.0');
$book =$dom->appendChild($dom->createElement('book'));
$title=$book->appendChild($dom->createElement('title'));
$title->appendChild($dom->createTextNode('PHP Cookbood'));
$title->setAttribute('edition','3');
$sklar=$book->appendChild($dom->createElement('author'));
$sklar->appendChild($dom->createTextNode('Sklar'));
$trachtenberg=$book->appendChild($dom->createElement('author'));
$trachtenberg->appendChild($dom->createTextNode('Trachenberg'));
$dom->formatOutput=true;
echo $dom->saveXML();
//$dom->save('books.xml');
$domm=new DOMDocument('1.0');
$domm->load('./books.xml');
var_dump($domm->nodeType);
echo "<hr/>";
$authors=$domm->getElementsByTagName('title');
var_dump($authors);
echo "<hr/>";
$sx=simplexml_load_file(__DIR__.'/books.xml');
var_dump($sx->book);
echo "<hr/>";