XML语言的学习记录4-XML DOM

学习笔记:

1. DOM 属性

  • nodeName - 节点的名称
  • nodeValue - 节点的值
  • nodeType  -   节点的类型
  • parentNode - 节点的父节点
  • childNodes - 节点 的子节点,返回 NodeList 对象
  • attributes - 节点的属性节点,getNamedItem() 返回属性节点
  • firstChild:表示第一个子节点
  • lastChild:表示最后一个子节点
  • previousSibling:表示前一个兄弟节点
  • nextSibling:表示后一个兄弟节点
  • ownerDocument:表示节点所属的文档对象
  • textContent:表示节点的文本内容

2. DOM方法

  • getElementsByTagName(name) - 获取带有指定标签名称的所有元素,返回 NodeList 对象
  • getElementById(id):通过元素的id属性获取元素节点
  • appendChild(node) -  插入子节点
  • removeChild(node) - 删除子节点
  • replaceChild() :用于替换节点
  • getAttribute(name):获取指定属性的属性值
  • setAttribute(name, value):设置指定属性的属性值
  • removeAttribute(name):移除指定属性
  • cloneNode(deep):复制节点,deep参数表示是否深度复制
  • createAttribute(name):创建一个属性节点
  • createElement(tagName):创建一个元素节点。
  • createTextNode(text):创建一个文本节点
  • createComment(data):创建一个注释节点
  • hasChildNodes():检查节点是否有子节点
  • normalize():合并相邻的文本节点并删除空文本节点
  • importNode(node, deep):导入节点到当前文档,deep参数表示是否深度导入,是否包括原节点的所有属性和子节点
  • getAttributeNode(name):用于获取指定节点的属性节点
  • insertBefore(newNode, y):用于在指定的子节点之前插入节点(父节点发起)
  • removeAttributeNode(node):通过使用 Node 对象作为参数,来删除属性节点
  • replaceData(offset,length,string) 方法用于替换文本节点中的数据,offset - 在何处开始替换字符,offset 值以 0 开始;length - 要替换多少字符,string - 要插入的字符串
  • createCDATASection(string):用于创建一个包含 CDATA(不会被解析的文本数据)的节点
  • insertData(offset, string):将数据插入已有的文本节点中

为父节点添加新节点,parentNode.appendChild(newElement);

删除节点只能是父节点删除子节点,parentNode.removeChild();

替换节点也是由父节点来替换,parentNode.replaceChild(newParagraph, oldParagraph);

3. 节点nodeType        

元素类型节点类型
元素1
属性2
文本3
CDATA_Section4
ENTITY_REFERENCE5
ENTITY6
PROCESSING_INSTRUCTION7
注释8
文档9
DOCUMENT_TYPE10
DOCUMENT_FRAGMENT11
NOTATION12

        注:此处是nodeType有12个值而已,并不是枚举,名称不作为key。

4. 处理空白和换行

         在处理XML的时候各浏览器有两处不同, 一个是加载xml的方式不同,另一个就是处理空白和换行的方式不同。

示例:

<bookstore>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="cooking">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book category="web" cover="paperback">
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
    <book category="web">
        <title lang="en">XQuery Kick Start</title>
        <author>James McGovern</author>
        <author>Per Bothner</author>
        <author>Kurt Cagle</author>
        <author>James Linn</author>
        <author>Vaidyanathan Nagarajan</author>
        <year>2003</year>
        <price>49.99</price>
    </book>
</bookstore>

对于该xml文件,输出子节点的数量:

x=xmlDoc.documentElement.childNodes;
document.write("Number of child nodes: " + x.length);

IE输出4,firefox等输出9.   输出4的话,就是4个“<book>”,而输出9的话,那么看一下子节点都是什么 。

function loadXMLDoc(fname) {
    var xmlhttp1 = new XMLHttpRequest();
    xmlhttp1.open("GET", fname, false);
    xmlhttp1.send();
    return xmlhttp1.responseXML;
}
xmlDoc = loadXMLDoc("/example/xdom/books.xml");

x = xmlDoc.documentElement.childNodes;
document.write("子节点的数目:" + x.length);
document.write("<br >");
for (let i = 0; i < x.length; i++) {
    let value = x[i].nodeValue;
    document.write("子节点:" + x[i].nodeName + " | " + tran(value));
    document.write("<br >");

}

function tran(textContent) {
    if (!textContent || textContent.length == 0) { return "none" }
    var a = '';
    for (var i = 0; i < textContent.length; i++) {
        var char = textContent.charAt(i);
        var unicode = char.charCodeAt(0).toString(2);
        console.log(a + '\\u' + unicode);
        a = a + '\\u' + unicode;
    }
    return a;
}

打印结果:

    其中,“\u1010”,就是换行符。   可以使用判断nodeType是否等于1来过滤换行等文本节点。    


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值