python 读取xml时文本节点显示元素节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 读取xml时文本节点显示元素节点相关的知识,希望对你有一定的参考价值。

很简单的xml,maxid应该是个文本节点
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
</catalog>
但是执行时显示是元素节点
import xml.dom.minidom
dom= xml.dom.minidom.parse('c:/12345.xml')
root = dom.documentElement
for rt in root.childNodes:
if rt.nodeName=='maxid':
print rt.nodeType
print rt.nodeName
控制台显示:

1
maxid
1是元素节点,不能取得值,求解

这里的4是作为maxid的子字节点存在的,所以你需要再遍历一层


dom = xml.dom.minidom.parse(\'c:/12345.xml\')
root = dom.documentElement
for rt in root.childNodes:
    if rt.nodeName == \'maxid\':
        for node in rt.childNodes:
            print node.nodeValue
            print node.data

如果你确定这里只有一个maxid,你也可以

import xml.dom.minidom

dom = xml.dom.minidom.parse(\'c:/12345.xml\')
maxid_nodes = dom.getElementsByTagName(\'maxid\')
print maxid_nodes[0].firstChild.data

希望采纳。

参考技术A

递归读取所有元素内容。

import xml.dom.minidom
def getNodeText(ele):
    if ele.nodeType == xml.dom.minidom.Node.ELEMENT_NODE:
        for e in ele.childNodes:
            getNodeText(e)
    elif ele.nodeType in (xml.dom.minidom.Node.TEXT_NODE,xml.dom.minidom.Node.CDATA_SECTION_NODE):
        print([ele.nodeValue.strip()])
dom= xml.dom.minidom.parse('t.xml')
root = dom.documentElement
getNodeText(root)

XML DOM

XML DOM可以类比于HTML DOM,详见:HTML DOM

 

1、DOM节点

  • 整个文档是一个文档节点
  • 每个XML元素是一个元素节点
  • 包含在XML元素的文本是文本节点
  • 每一个XML属性是一个属性节点
  • 注释是注释节点

 

 

2、获取XML DOM对象

此处参考:Ajax

 

 

3、XML DOM属性

  • nodeName  节点名称
  • nodeValue  节点值
  • parentNode  父节点
  • childNodes  子节点
  • attributes  属性节点

 

 

4、XML DOM方法

  • getElementsByTagName()
  • appendChild()  插入子节点
  • removeChild()  删除子节点

 

 

实例:

note.xml

<message>
<note id="010">
<to>fftu</to>
<from>per_1</from>
<info>info_1</info>
</note>
<note id="011">hahaha
<to>jiao</to>
<from>per_2</from>
<info>info_2</info>
</note>
</message>

 

main.js

function loadXmlDoc(fileName){
  if(window.XMLHttpRequest){
    var xmlhttp = new XMLHttpRequest();
  }
  xmlhttp.onreadystatechange = function(){
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
      var xmlDoc = xmlhttp.responseXML;
      var di_1 = document.getElementById("di_1");

      //获取文本节点"hahaha"
      di_1.innerHTML = xmlDoc.getElementsByTagName("note")[1].childNodes[0].nodeValue;

      //获取文本节点"jiao"
      di_1.innerHTML = xmlDoc.getElementsByTagName("note")[1].childNodes[1].childNodes[0].nodeValue;        
    }
  }

  xmlhttp.open("GET", "./note.xml", true);
  xmlhttp.send();
}

注意:元素节点本身并不包含文本,元素节点下的文本节点包含文本

以上是关于python 读取xml时文本节点显示元素节点的主要内容,如果未能解决你的问题,请参考以下文章

java如何读取xml节点元素值?

C#如何读取XML中指定的节点值?

根据根节点和元素之一读取其他 xml 元素?

在 Perl 中读取带有巨大文本节点的 xml 的实用方法

Qt通过Doc模式读取XML并设计一个增删改查方便的一个操作类

Python每日一练——数据存储第一关:读取XML节点和属性值的方法