參考文檔:http://www.runoob.com/xml/xml-tutorial.htmlhtml
Python主要有三種方式解析XML:node
參考文檔:python
https://docs.python.org/2/library/xml.dom.minidom.html;dom
https://docs.python.org/2/library/xml.dom.html ui
Interface | Section | Purpose |
---|---|---|
DOMImplementation |
DOMImplementation Objects | Interface to the underlying implementation. |
Node |
Node Objects | Base interface for most objects in a document. |
NodeList |
NodeList Objects | Interface for a sequence of nodes. |
DocumentType |
DocumentType Objects | Information about the declarations needed to process a document. |
Document |
Document Objects | Object which represents an entire document. |
Element |
Element Objects | Element nodes in the document hierarchy. |
Attr |
Attr Objects | Attribute value nodes on element nodes. |
Comment |
Comment Objects | Representation of comments in the source document. |
Text |
Text and CDATASection Objects | Nodes containing textual content from the document. |
ProcessingInstruction |
ProcessingInstruction Objects | Processing instruction representation. |
參考文檔:http://www.w3school.com.cn/xmldom/dom_nodetype.asp編碼
節點類型 | Named Constant | 描述 | nodeName 的返回值 | nodeValue 的返回值 | nodeType 的返回值 |
Element | ELEMENT_NODE | element(元素)元素 | element name | null | 1 |
Attr | ATTRIBUTE_NODE | 屬性。 | 屬性名稱 | 屬性值 | 2 |
Text | TEXT_NODE | 元素或屬性中的文本內容。 | #text | 節點內容 | 3 |
CDATASection | CDATA_SECTION_NODE | 表示文檔中的 CDATA 區段(文本不會被解析器解析) | #cdata-section | 節點內容 | 4 |
EntityReference | ENTITY_REFERENCE_NODE | 實體引用元素。 | 實體引用名稱 | null | 5 |
Entity | ENTITY_NODE | 實體。 | 實體名稱 | null | 6 |
ProcessingInstruction | PROCESSING_INSTRUCTION_NODE | 表示處理指令。 | target | 節點的內容 | 7 |
Comment | COMMENT_NODE | 註釋。 | #comment | 註釋文本 | 8 |
Document | DOCUMENT_NODE | 表示整個文檔(DOM 樹的根節點) | #document | null | 9 |
DocumentType | DOCUMENT_TYPE_NODE | 向爲文檔定義的實體提供接口。 | doctype 名稱 | null | 10 |
DocumentFragment | DOCUMENT_FRAGMENT_NODE | 表示輕量級的 Document 對象,其中容納了一部分文檔。 | #document fragment | null | 11 |
Notation | NOTATION_NODE | 表示在 DTD 中聲明的符號。 | 符號名稱 | null | 12 |
注意:spa
XML中全部的數據,包括屬性attr,文本內容test,都是node,因此不要直接對標籤對nodeValue,而是要獲取到childNode[0]後,childNode[0].nodeValuecode
更多方法:https://docs.python.org/2/library/xml.dom.html orm
#1A. import minidom from xml.dom.minidom import parse, parseString #1B. 解析XML文件成document對象 # parse()能夠傳入文件名或文件對象 dom1 = parse('c:\\temp\\mydata.xml') # parse an XML file by name datasource = open('c:\\temp\\mydata.xml') dom2 = parse(datasource) # parse an open file #1c. 解析XML字符串 dom3 = parseString('<myxml>Some data<empty/> some more data</myxml>') #1d. 獲取根節點 root = dom1.documentElement #1e.獲取指定節點下,指定標籤名的節點s,返回list elements = root.getElementsByTagName("XXX") #1f.獲取子節點s,返回list
elements = root.childNodes
#1g.將節點及其子節點轉換爲xml(即str),可指定編碼:toxml("utf-8") root.toxml()
# 還有一系列對node增刪改的方法,能夠參看官方手冊文檔