当elementFormDefault="qualified" Ӟ所有全局元素的子元素被以缺省方式放到目标命名空_但是全局元素或者类型将? 攑ֈ目标命名I间Q而当elementFormDefault="unqualified" Ӟ所有全局元素的子元素被以缺省方式放到无名命名空间? 而属性的命名I间cM地由attributeFormDefault="Q?来指明?/p>
需要明白的是,elementFormDefault="Q? 是有作用域的Qƈ且是被承的Q除非在子定义中覆盖父定义?/p>
下面三个例子说明了elementFormDefault的用效果。红色表C属于已命名I间的元素,蓝色表示属于未命名空间的元素?/p>
1.定义了目标命名空_ 全局elementFormDefault=“unqualified”。这旉了全局元素或者类型将归于目标命名I间外,局部元素将归于无名命名I间?/p>
unqualified.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs=" targetNamespace="aaaa" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xs:element name="c">
<xs:complexType>
<xs:sequence>
<xs:element name="c1" type="xs:double"/>
<xs:element name="c2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
unqualified.xml
<?xml version="1.0" encoding="UTF-8"?>
<n:c xmlns:n="aaaa" xmlns:xsi="
<c1>3.141593E0</c1>
<c2>String</c2>
</n:c>
2. 定义了目标命名空_ 全局elementFormDefault=“qualified”。这时全局元素或者类型将归于目标命名I间Q局部元素将以缺省方式归于目标命名空间?/p>
qualified.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs=" targetNamespace="aaaa" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="c">
<xs:complexType>
<xs:sequence>
<xs:element name="c1" type="xs:double"/>
<xs:element name="c2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
qualified.xml
<?xml version="1.0" encoding="UTF-8"?>
<c xmlns="aaaa" xmlns:xsi="
<c1>3.141593E0</c1>
<c2>String</c2>
</c>
3. 定义了目标命名空_ 全局elementFormDefault=“unqualified”。这时全局元素QcQ或者类型将归于目标命名I间? 局部元素(c1Qc2Q以~省方式归于无名命名I间。局部元素(c3Q在局部定义中使用form=“qualified”覆盖全局讑֮? unqualifiedQ这使得c3归于目标命名I间Q如果它有子元素Q子元素以~省方式归于目标命名I间Q?/p>
qualified2.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs=" targetNamespace="aaaa" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xs:element name="c">
<xs:complexType>
<xs:sequence>
<xs:element name="c1" type="xs:double"/>
<xs:element name="c2" type="xs:string"/>
<xs:element name="c3" type="xs:integer" form="qualified"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
qualified2.xml
<?xml version="1.0" encoding="UTF-8"?>
<n:c xmlns:n="aaaa" xmlns:xsi="
<c1>3.141593E0</c1>
<c2>String</c2>
<n:c3>0</n:c3>
</n:c>
?: http://bbs.xml.org.cn/dispbbs.asp?boardID=23&ID=25672
如需d、更新、创建或者操作某个XML文档Q则需要XML解析器?/strong>
实例
解析XML文g - 跨浏览器的实?/strong>
本例是一个跨览器的实例Q把某个XML文档("note.xml")载入XML解析器?
<html>
<body>
<script
type="text/vbscript">
set
xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("/example/xmle/xmle_xml_note.xml")
document.write("<h1>Traversing
the XML nodes</h1>")
for each x in
xmlDoc.documentElement.childNodes
document.write("<b>" & x.nodename
& "</b>")
document.write(":
")
document.write(x.text)
document.write("<br><br>")
next
</script>
</body>
</html>
解析XML字符?- 跨浏览器的实?/strong>
本例是一个跨览器的实例Q展C如何蝲入ƈ解析某个XML字符丌Ӏ?
<html>
<body>
<script
type="text/javascript">
var xmlDoc = new
ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("/example/xmle/xmle_xml_note.xml")
document.write
("The
first XML element in the file contains:
")
document.write
(xmlDoc.documentElement.childNodes.item(0).text)
</script>
</body>
</html>
解析一个XML文档
如需操作某个XML文档Q您需要XML解析器。解析器会将文档载入电脑的内存中。一旦文档被载入Q可使用DOM对其数据q行操作。DOM把XML作ؓ一颗树来处理?/p>
微Y的XML解析器与Mozilla览器中使用的解析器是有差异的。在本教E中Q我们会为您展示如何创徏可工作于IE和Mozilla览器中的跨览器脚本?/p>
微Y的XML解析?/strong>
微Y的XML解析器是存在于IE 5.0或更高版本中的COMlg。一旦你安装了IEQ就可用脚本来利用解析器了?/p>
微Y的XML解析器支持所有必要的功能Q来遍历节点树,讉K节点以及它们的属性|插入q删除节点,q将节点数{换回XML?/p>
如需创徏微YXML解析器的一个实例,请用下面的代码Q?/p>
JavaScript:
var xmlDoc=new
ActiveXObject("Microsoft.XMLDOM");
VBScript:
set
xmlDoc=CreateObject("Microsoft.XMLDOM")
ASP:
set
xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
下面的代码段可向微Y的XML解析器蝲入一个已有的XML文档("note.xml")Q?/p>
var xmlDoc=new
ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("note.xml");
上面的脚本的W一行创ZXML解析器的一个实例。第二行关闭了同步蝲入,q样可以保在文档被完全载入前解析器不会l箋执行。第三行会告知解析器载入名ؓ"note.xml"的XML的文档?/p>
Mozilla、Firefox以及Opera中的XML解析?/strong>
Mozilla览器的XML解析器支持所有必要的功能Q来遍历节点树,讉K节点以及它们的属性|插入q删除节点,q将节点树{换回XML?/p>
如需创徏Mozilla览器的XML解析器的一个实例,请用下面的代码Q?/p>
JavaScript:
var
xmlDoc=document.implementation.createDocument("ns","root",null);
W一个参敎ͼnsQ定义用于XML文档的命名空_namespaceQ。第二个参数QrootQ是XML文g中的XML根元素。第三个参数QnullQ一般LnullQ这是由于目前还没有用到q个参数?/p>
下面的代码段可向Mozilla览器的XML解析器蝲入一个已有的XML文档("note.xml")Q?/p>
var
xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.load("note.xml");
上面的脚本的W一行创ZXML解析器的一个实例。第二行会告知解析器载入名ؓ"note.xml"的XML的文档?/p>
解析某个XML文g - 跨浏览器的实?/strong>
下面的例子是一个跨览器的实例Q向XML解析器蝲入了某个已有的XML文档("note.xml")Q?/p>
<html>
<head>
<script
type="text/javascript">
var xmlDoc;
function loadXML()
{
// 用于 IE
的代码:
if (window.ActiveXObject)
{
xmlDoc=new
ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load("note.xml");
getmessage();
}
// 用于 Mozilla, Firefox,
Opera, {浏览器的代码:
else if (document.implementation
&&
document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.load("note.xml");
xmlDoc.onload=getmessage;
}
else
{
alert('Your browser cannot handle this script');
}
}
function
getmessage()
{
document.getElementById("to").innerHTML=
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
}
</script>
</head>
<body
onload="loadXML()">
<h1>W3Schools Internal
Note</h1>
<p><b>To:</b> <span
id="to"></span><br />
<b>From:</b> <span
id="from"></span><br />
<b>Message:</b> <span
id="message"></span>
</p>
</body>
</html>
输出Q?/p>
W3Schools Internal Note
To: Tove
From: Jani
Message:
Don't forget me this weekend!
重要的注?/strong>
如需从某个XML元素Q比?lt;from>Jani</from>Q中提取文本Q比如JaniQ,请用下面的语法Q?/p>
getElementsByTagName("from")[0].childNodes[0].nodeValue
重要事项QgetElementsByTagName会返回一个节Ҏl。此数组含有XML文档中拥有指定名U的所有元素。在q例子中Q只有一?from"元素Q但是仍焉要设定数l的下标( [0] )?/p>
解析一个XML字符?- 跨浏览器的实?/strong>
下面的代码是一个跨览器的实例Q向我们展示了如何加载和解析某个XML字符Ԍ
<html>
<body>
<script
type="text/javascript">
var
text="<note>";
text=text+"<to>Tove</to>";
text=text+"<from>Jani</from>";
text=text+"<heading>Reminder</heading>";
text=text+"<body>Don't
forget me this weekend!</body>";
text=text+"</note>";
// 用于 IE
的代码:
if (window.ActiveXObject)
{
var doc=new
ActiveXObject("Microsoft.XMLDOM");
doc.async="false";
doc.loadXML(text);
}
// 用于 Mozilla, Firefox, Opera,
{浏览器的代码:
else
{
var parser=new DOMParser();
var
doc=parser.parseFromString(text,"text/xml");
}
// documentElement
提交根元素:
var x=doc.documentElement;
document.write("Text of first child
element:
");
document.write(x.childNodes[0].childNodes[0].nodeValue);
document.write("<br
/>");
document.write("Text of second child element:
");
document.write(x.childNodes[1].childNodes[0].nodeValue);
</script>
</body>
</html>
输出Q?/p>
Text of first child element: Tove
Text of second child element:
Jani
注释QInternet Explorer使用loadXML()Ҏ解析XML字符Ԍ而Mozilla览器用DOMParser对象?/p>