javascript 进阶篇2 CSS XML学习(3)


<html>
<head>
<title>xml test</title>
</head>
<body>
<table>
<tr>
<td>book name:</td>
<td><span></span></td>
</tr>
<tr>
<td>book author:</td>
<td ><span><span></td>
</tr>
</table>
<script type="text/javascript">
<!--
var xmldoc=document.implementation.createDocument("","",null);
xmldoc.load("https://www.jb51.net/xml/books.xml")
//xmlDoc.evaluate(xpath, xmlDoc, namespace, XPathResult.ANY_TYPE,XPahrResult);
var evaluatorObj=new XPathEvaluator();
function getBookChild(path){
return evaluatorObj.evaluate(path,xmldoc.documentElement,null,
XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);
}
var namelist=getBookChild("/bookstore/book/title");
var name=namelist.iterateNext();
var authorlist=getBookChild("/bookstore/book/author");
var author=authorlist.iterateNext();
var bname=document.getElementById("bname");
var bauthor=document.getElementById("bauthor");
bname.innerHTML=name.childNodes[0].nodeValue;
bauthor.innerHTML=author.childNodes[0].nodeValue
//-->
</script>
<body>
</html>


xml在FF中的读取网上的资源很少,我找了好多也没找到可以读到结点值的,于是我用debug在ff浏览器下观察了好久,终于找到了 author.childNodes[0].nodeValue 这一句。
XML文件在firefox浏览器下的读取主要有两个类实现,一个是XPathEvaluator, XPathResult。其实就是用XPathEvaluator查找,然后在XPathResult里存储查找结果。可以看到我的代码里用XPathEvaluator查找的部分,那个函数evaluate的参数非常多,但是必须要了解这个函数才行,摘取下别人的东西(原内容点这里):
函数:evaluate(xpathText,contextNode,namespaceURLMapper,resultType,result)
参数 描述
xpathText   表示要计算的 XPath 表达式的字符串。  
contextNode   文档中,对应要计算的表达式的节点。  
namespaceURLMapper  

把一个命名空间前缀映射为一个全称命名空间 URL 的函数。

如果不需要这样的映射,就为 null。

 
resultType  

指定了期待作为结果的对象的类型,使用 XPath 转换来强制结果类型。

类型的可能的值是 XPathResult 对象所定义的常量。

 
result  

一个复用的 XPathResult 对象;

如果你要创建一个新的 XPathResult 对象,则为 null。

 
注意,resultTypt有很多种参数值,继续抄来:
返回类型   说明  
ANY_TYPE   把这个值传递给 Document.evaluate() 或 XPathExpression.evaluate() 来指定可接受的结果类型。属性 resultType 并不设置这个值。  
NUMBER_TYPE   numbervalue 保存结果。  
STRING_TYPE   stringvalue 保存结果。  
BOOLEAN_TYPE   booleanValue 保存结果。  
UNORDERED_NODE_ITERATOR_TYPE   这个结果是节点的无序集合,可以通过重复调用 iterateNext() 直到返回 null 来依次访问。在此迭代过程中,文档必须不被修改。  
ORDERED_NODE_ITERATOR_TYPE   结果是节点的列表,按照文档中的属性排列,可以通过重复调用 iterateNext() 直到返回 null 来依次访问。在此迭代过程中,文档必须不被修改。  
UNORDERED_NODE_SNAPSHOT_TYPE   结果是一个随机访问的节点列表。snapshotLength 属性指定了列表的长度,并且 snapshotItem() 方法返回指定下标的节点。节点可能和它们出现在文档中的顺序不一样。既然这种结果是一个“快照”,因此即便文档发生变化,它也有效。  
ORDERED_NODE_SNAPSHOT_TYPE   这个结果是一个随机访问的节点列表,就像 UNORDERED_NODE_SNAPSHOT_TYPE,只不过这个列表是按照文档中的顺序排列的。  
ANY_UNORDERED_NODE_TYPE   singleNodeValue 属性引用和查询匹配的一个节点,如果没有匹配的节点则为 null。如果有多个节点和查询匹配,singleNodeValue 可能是任何一个匹配节点。  
FIRST_ORDERED_NODE_TYPE   singleNodeValue 保存了文档中的第一个和查询匹配的节点,如果没有匹配的节点,则为 null。  
(虽然是抄的,可是复制神马的也很辛苦的=w=)

除了这些之外,xml文件结点其实还可以增加条件,比如只要第一个符合条件的结点:

/bookstore/book[1]/title
或者价格高于35的:

/bookstore/book[price>35]/price
之前的例子里不用条件选取是我想示范一下返回所有子结点的效果,毕竟这才是常用的。



这里提到一个概念叫做XSLT,这是一个用来转换xml文件的语言,全称是:extensible stylesheet language transformation。XSLT借用XPath在xml文档中寻找信息,它可以将xml文件中存放的内容按照指定样式显示为html页面。

具体有兴趣的同学可以查查看,反正我是没兴趣。。╮(╯▽╰)╭

终于,到了xml的最后一个概念:数据岛

其实就是指页面包含了xml数据信息,跟css一样,可以内部镶嵌,办法就是<xml>......</xml> 也可以外部引入:<xml src="https://www.jb51.net/xml/books.xml"></xml>

xml数据岛的数据与html标签的绑定,通过datasrc, datafld来完成,但是我试来试去也没有一个代码能运行,于是就暂时这样吧,等我把代码弄好再回来补充好了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdjggd.html