XML数据孤岛支持
在HTML页面中嵌入数据"孤岛"功能已成为日益迫切的需求。在Pocket Internet Explorer中,"数据孤岛"可以在XML内编写。
如下所示,要嵌入XML数据孤岛,可以将数据直接包含在HTML中。
<XML ID=擟ontacts? <CONTACTS> <CONTACT> <NAME>Stephanie Smith</NAME> <BIRTHDATE>1971-07-01</BIRTHDATE> <EMAIL>ssmith@abcdef.com</EMAIL> <PHONE>(425) 111-1111</PHONE> </CONTACT> <CONTACT> <NAME> Bill Williams</NAME> <BIRTHDATE>1968-09-17</BIRTHDATE> <EMAIL>billw@abcdef.com</EMAIL> <PHONE>(425) 111-1111</PHONE> </CONTACT> <CONTACT> <NAME>Christopher Jones</NAME> <BIRTHDATE>1999-09-08</BIRTHDATE> <EMAIL>cjones@abcdef.com</EMAIL> <PHONE>(425) 111-1111</PHONE> </CONTACT> </CONTACTS> </XML> | 或者从其它文件中引用数据:
DOM支持
Pocket PC上的MSXML拥有对DOM的完整支持,并且符合W3C Document Object Model(文档对象模型,DOM)建议标准。此外,它还拥有Microsoft扩展功能,这些扩展功能允许您访问打印数据和名称空间信息、创建"node by node"类型或实现其它一些功能。以下脚本用于装入包含联系信息的XML文档,并通过扩展样式表语言(XSL)模式匹配来显示名为"Bill Williams"的联系人电话号码:
function showPhone() { var root = Contacts.documentElement; var selectedElems = root.selectNodes("CONTACT[NAME=''Bill Williams'']"); var billElem = selectedElems.item(0); var phone = billElem.childNodes.item(3).nodeTypedValue;
alert("Bill Williams phone number is " + phone); } | selectNodes方法允许您通过XSL模式匹配功能获取节点列表。本例中,您正在寻找"name(名称)"元素值为"Bill Williams"的所有"contact(联系人)"元素。由于仅有一个与此模式匹配的元素,selectNodes返回一个长度为1的节点列表。
XSL支持
Pocket PC上的MSXML同样提供了对XSL的支持。如果您需要以复杂方式显示XML数据,使用XSL支持将是一种理想选择。例如,假设您想要显示一个简单表格中的所有联系信息。首先,可以创建一个XSL样式表。样式表用于表达结构化内容的显示方式;具体说,就是源数据应具备何种风格、如何展示以及如何在Pocket PC上进行分页。
<xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template match="/"> <H3>Contacts</H3> <TABLE BORDER="1" CELLPADDING="1" CELLSPACING="0"> <TR> <TD BGCOLOR="#C0C0C0"><B>Name</B></TD> <TD BGCOLOR="#C0C0C0"><B>Phone</B></TD> <TD BGCOLOR="#C0C0C0"><B>Email</B></TD> </TR> <xsl:for-each select="CONTACTS/CONTACT" order-by="EMAIL"> <TR> <TD><I><xsl:value-of select="NAME"/></I></TD> <TD><xsl:value-of select="PHONE"/></TD> <TD><xsl:value-of select="EMAIL"/></TD> </TR> </xsl:for-each> </TABLE> </xsl:template> </xsl:stylesheet> | 这个样式表创建一个表格并用选定XML元素的值进行填充。该样式表还通过电子邮件名进行排序(在xsl:for-each元素上使用order-by属性)。可以看到,联系信息显示的顺序与原始XML文档不同。
现在的一大问题是:"如何将样式表应用到XML文档中?"解决方法是使用XML Object Model(XML对象模型)。IXMLDOMNode上的transformNode方法允许您导入XSL树,并通过该树将XML节点转化为输出字符串。在下面例子中,该字符串是一条HTML语句,它将被插入到当前文档中:
function showContacts() { document.write(Contacts.transformNode(ContactsSS.documentElement); } | 上述脚本执行后在浏览器中的显示为:
联系人
| Name |
Phone |
Email |
| Bill Williams |
(425) 111-1111 |
billw@abcdef.com |
| Christopher Jones |
(425) 111-1111 |
cjones@abcdef.com |
| Stephanie Smith |
(425) 111-1111 |
ssmith@abcdef.com |
在浏览器中直接查看XML
您也可以通过在Pocket Internet Explorer地址栏中直接输入XML文件的URL来查看XML文件。XML文件可以通过缺省或专门设计的样式表来显示。如果您将下面这条处理指令放在"contacts.xml"文件开始处,则XML将像使用transformNode方法时描述的那样,无需任何脚本,便可在浏览器中显示:
<?xml:stylesheet type="text/xsl" href="contactsTable.xsl" ?>
ServerXMLHTTP | 通过ServerXMLHTTP对象,您可以像对待对象那样发送XML树。在下面脚本中,创建了一个ServerXMLHTTP对象,并通过它将名为"template(模板)"的XML树发送到服务器上。
var httpOb = new ActiveXObject("MSXML2.ServerXMLHTTP");
httpOb.Open("POST","http://myServer/postContact.ASP", false); var contact = template.XMLDocument.documentElement;
contact.childNodes.item(0).text = contactName.value; contact.childNodes.item(1).text = contactPhone.value; contact.childNodes.item(2).text = contactEmail.value;
httpOb.send(template.XMLDocument); | 与Microsoft Internet Explorer 5中MSXML的区别
MSXML for Pocket PC与Microsoft Internet Explorer 5中的MSXML几乎没有任何区别。尽管如此,还是存在一些Pocket PC不能支持的特性。
未提供对IE4 MSXML DOM的向后兼容性:MSXML for Microsoft Internet Explorer 5包含对Microsoft Internet Explorer 4中XML DOM进行模拟的功能。为降低内存需求和ROM容量,MSXML for Pocket PC不包含此项功能。
不支持数据绑定:Pocket Internet Explorer及MSXML for Pocket PC均不支持Data Binding。对Data Binding的支持需要复杂的HTML布局基础提供支持。
小心CSS属性:请记住,Pocket Internet Explorer不支持CSS。请仔细查看您所创建的XSL转换并确保其中不含CSS元素或属性。尤其要注意在HTML标记中谨慎使用STYLE属性。
由于提供了对下载、查看、操纵XML数据的支持,XML允许开发人员通过具有一致性的标准方式在移动应用程序中提供复杂结构化数据。
|