在 HTML 中显示 XML 数据 <html> <body>
<script type="text/javascript"> if (window.XMLHttpRequest) {// code for IE7+,Firefox,Chrome,Opera,Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6,IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","/example/xmle/cd_catalog.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML;
document.write("<table border='1'>"); var x=xmlDoc.getElementsByTagName("CD"); for (i=0;i<x.length;i++) { document.write("<tr><td>"); document.write(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); document.write("</td><td>"); document.write(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); document.write("</td></tr>"); } document.write("</table>"); </script>
</body> </html>
解析 XML 字符串
下面的 JavaScript 代码片段把 XML 字符串解析到 XML DOM 对象中(把字符串 txt 载入解析器):
txt="<bookstore><book>"; txt=txt+"<title>Everyday Italian</title>"; txt=txt+"<author>Giada De Laurentiis</author>"; txt=txt+"<year>2005</year>"; txt=txt+"</book></bookstore>";
if (window.DOMParser) { parser=new DOMParser(); xmlDoc=parser.parseFromString(txt,"text/xml"); } else // Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(txt); }
注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。
注释:loadXML() 方法用于加载字符串(文本),load() 用于加载文件。 解析 XML 文件 - 跨浏览器实例
下列代码把一个 XML 文档 ("note.xml") 载入 XML 解析器中: <html> <body> <h1>W3School.com.cn 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>
<script type="text/javascript"> if (window.XMLHttpRequest) {// code for IE7+,"note.xml",false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML;
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>
</body> </html> XML 的应用 <html> <head> <script type="text/javascript"> if (window.XMLHttpRequest) {// code for IE7+,false); xmlhttp.send(); xmlDoc=xmlhttp.responseXML; x=xmlDoc.getElementsByTagName("CD");
function displayCDInfo(i) { artist=(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); title=(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); year=(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue); country=(x[i].getElementsByTagName("COUNTRY")[0].childNodes[0].nodeValue); company=(x[i].getElementsByTagName("COMPANY")[0].childNodes[0].nodeValue); price=(x[i].getElementsByTagName("PRICE")[0].childNodes[0].nodeValue); txt="Artist: "+artist+"<br />Title: "+title+"<br />Year: "+year+"<br />Country: "+country+"<br />Company: "+company+"<br />Price: "+price ; document.getElementById("showCD").innerHTML=txt; } </script> </head>
<body> <div id='showCD'>点击某个 CD 就可显示专辑信息:</div><br /> <script type="text/javascript"> document.write("<table border='1'>"); for (var i=0;i<x.length;i++) { document.write("<tr onclick='displayCDInfo(" + i + ")'>"); document.write("<td>"); document.write(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); document.write("</td><td>"); document.write(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); document.write("</td></tr>"); } document.write("</table>"); </script>
</body> </html>
在 XML 中有 5 个预定义的实体引用:
< < 小于 > > 大于 & & 和号 ' ' 省略号 " " 引号
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束: <script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then { return 1; } else { return 0; } } ]]> </script>
在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。
关于 CDATA 部分的注释:
CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。
在服务器上存储 XML
XML 文件在 Internet 服务器上进行存储的方式与 HTML 文件完全相同。
请打开 Windows 记事本,并输入以下代码: <?xml version="1.0" encoding="ISO-8859-1"?> <note> <from>John</from> <to>George</to> <message>Don't forget the meeting!</message> </note>
然后用适当的文件名,比如 "note.xml",在 web 服务器上保存这个文件。
通过 ASP 生成 XML
XML 可在不安装任何 XML 软件的情况下在服务器端生成。
如需从服务器生成 XML 响应 - 只需简单地编写以下代码并在服务器上把它保存为一个 ASP 文件: <% response.ContentType="text/xml" response.Write("<?xml version='1.0' encoding='ISO-8859-1'?>") response.Write("<note>") response.Write("<from>John</from>") response.Write("<to>George</to>") response.Write("<message>Don't forget the meeting!</message>") response.Write("</note>") %>
请注意,此响应的内容类型必须设置为 "text/xml"。
查看这个ASP文件如何从服务器返回
如果您还不懂如何编写 ASP,请访问我们的《ASP 教程》。
通过 PHP 生成 XML
如需使用 PHP 在服务器上生成 XML 响应,请使用下面的代码: <?php header("Content-type:text/xml"); echo "<?xml version='1.0' encoding='ISO-8859-1'?>"; echo "<note>"; echo "<from>John</from>"; echo "<to>George</to>"; echo "<message>Don't forget the meeting!</message>"; echo "</note>"; ?>
请注意,响应头部的内容类型必须设置为 "text/xml"。
如果您需要学习 PHP,请访问我们的《PHP 教程》。
从数据库获取 XML
XML 可在不安装任何 XML 软件的情况下从数据库生成。
如需从服务器生成 XML 数据库响应,只需简单地编写以下代码,并把它在服务器上保存为 ASP 文件: <% response.ContentType = "text/xml" set conn=Server.CreateObject("ADODB.Connection") conn.provider="Microsoft.Jet.OLEDB.4.0;" conn.open server.mappath("/db/database.mdb") sql="select FirstName,LastName from Persons" set rs=Conn.Execute(sql)
rs.MoveFirst()
response.write("<?xml version='1.0' encoding='ISO-8859-1'?>") response.write("<Customers>") while (not rs.EOF) response.write("<Person>") response.write("<FirstName>" & rs("FirstName") & "</FirstName>") response.write("<LastName>" & rs("LastName") & "</LastName>") response.write("</Person>") rs.MoveNext() wend
rs.close() conn.close() response.write("</Customers>") %>
查看以上 ASP 代码的实际数据库输出案例
上面的例子使用了带有 ADO 的 ASP。
如果您需要学习 ADO,请访问我们的《ADO 教程》。
在服务器上通过 XSLT 转换 XML
下面的 ASP 代码在服务器上把 XML 文件转换为 XHTML: <% 'Load XML set xml = Server.CreateObject("Microsoft.XMLDOM") xml.async = false xml.load(Server.MapPath("simple.xml"))
'Load XSL set xsl = Server.CreateObject("Microsoft.XMLDOM") xsl.async = false xsl.load(Server.MapPath("simple.xsl"))
'Transform file Response.Write(xml.transformNode(xsl)) %>
例子解释 1.第一个代码块创建微软 XML 解析器的实例 (XMLDOM),并把 XML 文件载入内存 2.第二个代码块创建解析器的另一个实例,并把 XSL 文件载入内存 3.最后一个代码使用 XSL 文档来转换 XML 文档,并把结果以 XHTML 发送到您的浏览器。完工。
看看上面的代码怎么运行
通过 ASP 把 XML 保存为文件
这个 ASP 实例会创建一个简单的 XML 文档,并把该文档保存到服务器上: <% text="<note>" text=text & "<to>George</to>" text=text & "<from>John</from>" text=text & "<heading>Reminder</heading>" text=text & "<body>Don't forget the meeting!</body>" text=text & "</note>"
set xmlDoc=Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.loadXML(text)
xmlDoc.Save("test.xml") %>
真实的表单例子
现在,我们看一个真实的表单例子。
我们首先看一下这个被用在例子中的 HTML 表单:下面的HTML表单要求用户输入他们的名字、国籍以及电子邮件地址。随后这些信息会被写到一个 XML 文件,以便存储。
"customers.htm": <html>
<body> <form action="saveForm.asp" method="post"> <h1>请输入您的联系信息:</h1> <label>名字: </label> <p><input type="text" id="firstName" name="firstName"></p>
<label>姓氏: </label> <p><input type="text" id="lastName" name="lastName"></p>
<label>国家: </label> <p><input type="text" id="country" name="country"></p>
<label>邮件: </label> <p><input type="text" id="email" name="email"></p>
<p> <input type="submit" id="btn_sub" name="btn_sub" value="Submit"> <input type="reset" id="btn_res" name="btn_res" value="Reset"> </p> </form> </body>
</html>
用于以上 HTML 表单的 action 被设置为 "saveForm.asp"。"saveForm.asp" 文件是一个 ASP 页面,可循环遍表单域,并把它们的值存储在一个 XML 文件中: <% dim xmlDoc dim rootEl,fieldName,fieldValue,attID dim p,i
'如果有错误发生,不允许程序终止 On Error Resume Next
Set xmlDoc = server.CreateObject("Microsoft.XMLDOM") xmlDoc.preserveWhiteSpace=true
'创建并向文档添加根元素 Set rootEl = xmlDoc.createElement("customer") xmlDoc.appendChild rootEl
'循环遍历 Form 集 for i = 1 To Request.Form.Count '除去表单中的 button 元素 if instr(1,Request.Form.Key(i),"btn_")=0 then '创建 field 和 value 元素,以及 id 属性 Set fieldName = xmlDoc.createElement("field") Set fieldValue = xmlDoc.createElement("value") Set attID = xmlDoc.createAttribute("id") '把当前表单域的名称设置为 id 属性的值 attID.Text = Request.Form.Key(i) '把 id 属性添加到 field 元素 fieldName.setAttributeNode attID '把当前表单域的值设置为 value 元素的值 fieldValue.Text = Request.Form(i) '将 field 元素作为根元素的子元素进行添加 rootEl.appendChild fieldName '将 value 元素作为 field 元素的子元素进行添加 fieldName.appendChild fieldValue end if next
'添加 XML processing instruction '并把它加到根元素之前 Set p = xmlDoc.createProcessingInstruction("xml","version='1.0'") xmlDoc.insertBefore p,xmlDoc.childNodes(0)
'保存 XML 文件 xmlDoc.save "c:Customer.xml"
'释放所有的对象引用 set xmlDoc=nothing set rootEl=nothing set fieldName=nothing set fieldValue=nothing set attID=nothing set p=nothing
'测试是否有错误发生 if err.number<>0 then response.write("Error: No information saved.") else response.write("Your information has been saved.") end if %>
注释:如果指定的 XML 文件名已经存在,那个文件会被覆盖!
XML 文件会由上面的代码生成,大致的样子是这样的:("Customer.xml"): <?xml version="1.0" ?> <customer> <field id="firstName"> <value>David</value> </field> <field id="lastName"> <value>Smith</value> </field> <field id="country"> <value>China</value> </field> <field id="email"> <value>mymail@myaddress.com</value> </field> </customer> (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|