xml的学习和使用python解析读取xml文件

  1. XML的介绍

XML 指可扩展标记语言(EXtensible Markup Language)。

和json类似也是用于存储和传输数据,还可以用作配置文件。

类似于HTML超文本标记语言,但是HTML所有的标签都是预定义的,而xml的标签是自行定义。

XML 和 HTML 为不同的目的而设计,HTML 旨在显示信息,而 XML 旨在传输信息。:

XML 被设计用来传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。

所以对 XML 最好的描述是:

XML 是独立于软件和硬件的信息传输工具。

2.XML的树结构

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

每一个元素有三个属性:tag、text、attrib

比如下面例子中,note是根元素,他的tag就是note,attrib属性是id=1,没有文本节点,有四个子元素。

<?xml version="1.0" encoding="UTF-8"?>
<note id="1>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note></code></pre><p>&#x7B2C;&#x4E00;&#x884C;&#x662F; XML &#x58F0;&#x660E;&#x3002;&#x5B83;&#x5B9A;&#x4E49; XML &#x7684;&#x7248;&#x672C;&#xFF08;1.0&#xFF09;&#x548C;&#x6240;&#x4F7F;&#x7528;&#x7684;&#x7F16;&#x7801;&#xFF08;UTF-8 : &#x4E07;&#x56FD;&#x7801;, &#x53EF;&#x663E;&#x793A;&#x5404;&#x79CD;&#x8BED;&#x8A00;&#xFF09;&#x3002;</p><p>&#x7B2C;&#x4E8C;&#x884C;&#x63CF;&#x8FF0;&#x6587;&#x6863;&#x7684;&#x6839;&#x5143;&#x7D20;&#xFF08;&#x50CF;&#x5728;&#x8BF4;&#xFF1A;" 本文档是一个便签")< p><p>&#x63A5;&#x4E0B;&#x6765; 4 &#x884C;&#x63CF;&#x8FF0;&#x6839;&#x7684; 4 &#x4E2A;&#x5B50;&#x5143;&#x7D20;&#xFF08;to, from, heading &#x4EE5;&#x53CA; body&#xFF09;&#xFF0C;&#x5B50;&#x5143;&#x7D20;&#x53EA;&#x6709;&#x6587;&#x672C;&#x5185;&#x5BB9;&#xFF0C;<note>&#x5143;&#x7D20;&#x62E5;&#x6709;&#x5C5E;&#x6027;&#x548C;&#x5143;&#x7D20;&#x5185;&#x5BB9;&#x3002;</note></p><p>&#x6700;&#x540E;&#x4E00;&#x884C;&#x5B9A;&#x4E49;&#x6839;&#x5143;&#x7D20;&#x7684;&#x7ED3;&#x5C3E;&#xFF1A;</p></note><p></p><p></p><p>&#x7236;&#x3001;&#x5B50;&#x4EE5;&#x53CA;&#x540C;&#x80DE;&#x7B49;&#x672F;&#x8BED;&#x7528;&#x4E8E;&#x63CF;&#x8FF0;&#x5143;&#x7D20;&#x4E4B;&#x95F4;&#x7684;&#x5173;&#x7CFB;&#x3002;&#x7236;&#x5143;&#x7D20;&#x62E5;&#x6709;&#x5B50;&#x5143;&#x7D20;&#x3002;&#x76F8;&#x540C;&#x5C42;&#x7EA7;&#x4E0A;&#x7684;&#x5B50;&#x5143;&#x7D20;&#x6210;&#x4E3A;&#x540C;&#x80DE;&#x3002;&#x6240;&#x6709;&#x7684;&#x5143;&#x7D20;&#x90FD;&#x53EF;&#x4EE5;&#x6709;&#x6587;&#x672C;&#x5185;&#x5BB9;&#x548C;&#x5C5E;&#x6027;&#xFF08;&#x7C7B;&#x4F3C; HTML &#x4E2D;&#xFF09;&#x3002;</p><h1>3.XML&#x8BED;&#x6CD5;</h1><p>&#x5728; HTML &#x4E2D;&#xFF0C;&#x67D0;&#x4E9B;&#x5143;&#x7D20;&#x4E0D;&#x5FC5;&#x6709;&#x4E00;&#x4E2A;&#x5173;&#x95ED;&#x6807;&#x7B7E;&#xFF1B;&#x5728; XML &#x4E2D;&#xFF0C;&#x7701;&#x7565;&#x5173;&#x95ED;&#x6807;&#x7B7E;&#x662F;&#x975E;&#x6CD5;&#x7684;&#x3002;&#x6240;&#x6709;&#x5143;&#x7D20;&#x90FD;&#x5FC5;&#x987B;&#x6709;&#x5173;&#x95ED;&#x6807;&#x7B7E;&#x3002;</p><p>&#x5728; XML &#x4E2D;&#xFF0C;XML &#x7684;&#x5C5E;&#x6027;&#x503C;&#x5FC5;&#x987B;&#x52A0;&#x5F15;&#x53F7;&#x3002;</p><pre><code><note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note></code></pre><p>&#x5728; HTML &#x4E2D;&#xFF0C;&#x5E38;&#x4F1A;&#x770B;&#x5230;&#x6CA1;&#x6709;&#x6B63;&#x786E;&#x5D4C;&#x5957;&#x7684;&#x5143;&#x7D20;&#xFF1B;&#x5728; XML &#x4E2D;&#xFF0C;&#x6240;&#x6709;&#x5143;&#x7D20;&#x90FD;&#x5FC5;&#x987B;&#x5F7C;&#x6B64;&#x6B63;&#x786E;&#x5730;&#x5D4C;&#x5957;&#x3002;</p><pre><code><b><i>This text is bold and italic</i></b> &#x6B63;&#x786E;
<b><i>This text is bold and italic</i></b> &#x9519;&#x8BEF;</code></pre><p>XML &#x4E2D;&#x7684;&#x6CE8;&#x91CA;&#xFF1A;<!-- This is a comment --></p><h1>4.XML DOM</h1><p>DOM&#xFF08;Document Object Model &#x6587;&#x6863;&#x5BF9;&#x8C61;&#x6A21;&#x578B;&#xFF09;&#x5B9A;&#x4E49;&#x4E86;&#x8BBF;&#x95EE;&#x548C;&#x64CD;&#x4F5C;&#x6587;&#x6863;&#x7684;&#x6807;&#x51C6;&#x65B9;&#x6CD5;&#xFF0C;&#x628A; XML &#x6587;&#x6863;&#x4F5C;&#x4E3A;&#x6811;&#x7ED3;&#x6784;&#x6765;&#x67E5;&#x770B;&#x3002;</p><p>&#x6240;&#x6709;&#x5143;&#x7D20;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; DOM &#x6811;&#x6765;&#x8BBF;&#x95EE;&#x3002;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;&#x6216;&#x5220;&#x9664;&#x5B83;&#x4EEC;&#x7684;&#x5185;&#x5BB9;&#xFF0C;&#x5E76;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x5143;&#x7D20;&#x3002;&#x5143;&#x7D20;&#xFF0C;&#x5B83;&#x4EEC;&#x7684;&#x6587;&#x672C;&#xFF0C;&#x4EE5;&#x53CA;&#x5B83;&#x4EEC;&#x7684;&#x5C5E;&#x6027;&#xFF0C;&#x90FD;&#x88AB;&#x8BA4;&#x4E3A;&#x662F;&#x8282;&#x70B9;&#x3002;</p><h2>4.1python&#x89E3;&#x6790;xml&#x4F8B;&#x5B50;&#xFF1A;</h2><pre><code><?xml version="1.0" encoding="utf-8" ?>
<!--this is a test about xml.-->
<booklist type="science and engineering">
 <book category="math">
     <title>learning math</title>
     <author>&#x5F20;&#x4E09;</author>
     <pagenumber>561</pagenumber>
 </book>
 <book category="Python">
     <title>learning Python</title>
     <author>&#x674E;&#x56DB;</author>
     <pagenumber>600</pagenumber>
 </book>
</booklist></code></pre><p>&#x4F7F;&#x7528;python&#x811A;&#x672C;&#x8BFB;&#x53D6;&#x4EE3;&#x7801;&#xFF1A;</p><pre><code>import os
from xml.dom.minidom import parse

xml_file = r'D:\pythonProject\xml\book.xml'

    # print(xml_file)
#&#x83B7;&#x53D6; xml &#x6587;&#x6863;&#x5BF9;&#x8C61;
domTree = parse(xml_file)
#&#x83B7;&#x5F97;&#x6839;&#x8282;&#x70B9;
rootNode = domTree.documentElement

print('&#x663E;&#x793A;xml&#x6587;&#x6863;&#x5185;&#x5BB9;')
print(rootNode.toxml())
print('*'*10)

#&#x5224;&#x65AD;&#x6839;&#x8282;&#x70B9;&#x662F;&#x5426;&#x6709;&#x5C5E;&#x6027;
if rootNode.hasAttribute('type'):
    print('&#x6839;&#x8282;&#x70B9;&#x7684;&#x7684;type&#x5C5E;&#x6027;&#x4E3A;&#xFF1A;',rootNode.getAttribute('type'))
else:
    print('&#x6839;&#x8282;&#x70B9;&#x6CA1;&#x6709;&#x5C5E;&#x6027;')

book=rootNode.getElementsByTagName('book')
print('&#x6709;%d&#x4E2A;book&#x8282;&#x70B9;'%len(book))

print(rootNode.getElementsByTagName('title')[0].childNodes[0].nodeValue)
print("rootNode.getElementsByTagName('title')[0] &#x662F;&#x83B7;&#x53D6;&#x6587;&#x6863;&#x7B2C;&#x4E00;&#x4E2A;title&#x5143;&#x7D20;")
print("childNodes[0]&#x662F;&#x2018;title'&#x5143;&#x7D20;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x5B50;&#x5143;&#x7D20;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x6587;&#x672C;&#x8282;&#x70B9;")
print("nodeValue&#x4E3A;&#x83B7;&#x53D6;&#x8282;&#x70B9;&#x7684;&#x503C;")

print('*'*10)

for i in range(len(book)):
    print('\n&#x663E;&#x793A;&#x7B2C;%d&#x4E2A;book&#x8282;&#x70B9;&#x7684;&#x5185;&#x5BB9;:'%(i+1))
    print(rootNode.getElementsByTagName('book')[i].toxml())
    print()
    if rootNode.getElementsByTagName('book')[i].hasAttribute('category'):
            print('book&#x8282;&#x70B9;&#x7684;&#x5C5E;&#x6027;&#x662F;&#xFF1A;',book[i].getAttribute('category'))

    print('title&#x7684;&#x503C;&#xFF1A;',book[i].getElementsByTagName('title')[0].childNodes[0].data)
    #&#x4ECE;&#x6839;&#x8282;&#x70B9;&#x5199;&#x662F;print(rootNode.getElementsByTagName('book')[1].getElementsByTagName('title')[0].childNodes[0].data)

    print('author&#x7684;&#x503C;&#xFF1A;',book[i].getElementsByTagName('author')[0].childNodes[0].data)
    #&#x6216;&#x8005;&#x7528;childNodes[0].nodeValue
    # print('author&#x7684;&#x503C;&#xFF1A;', book[i].getElementsByTagName('author')[0].childNodes[0].nodeValue)

    print('pageNumber&#x7684;&#x503C;&#xFF1A;',book[i].getElementsByTagName('pageNumber')[0].childNodes[0].data)
    print('*' * 10)

</code></pre><p>&#x8FD0;&#x884C;&#x7ED3;&#x679C;&#xFF1A;</p><p><img src="https://img-blog.csdnimg.cn/49908344e3bd4466b49c7509109a5744.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn5a6H6L-b6Zi25LmL6Lev,size_11,color_FFFFFF,t_70,g_se,x_16"></p><p>&#x5176;&#x4E2D;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#x5373;&#x4F7F; XML &#x6587;&#x4EF6;&#x53EA;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x4E5F;&#x5FC5;&#x987B;&#x6307;&#x5B9A;&#x6570;&#x7EC4;&#x7D22;&#x5F15; [0]&#x3002;&#x8FD9;&#x662F;&#x56E0;&#x4E3A;getElementsByTagName() &#x65B9;&#x6CD5;&#x8FD4;&#x56DE;&#x7684;&#x662F;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#x3002;</p><h2>4.2python&#x521B;&#x5EFA;xml&#x4F8B;&#x5B50;</h2><p>doc.writexml():&#x751F;&#x6210;xml&#x6587;&#x6863;&#xFF0C;&#x5C06;&#x521B;&#x5EFA;&#x7684;&#x5B58;&#x5728;&#x4E8E;&#x5185;&#x5B58;&#x4E2D;&#x7684;xml&#x6587;&#x6863;&#x5199;&#x5165;&#x672C;&#x5730;&#x786C;&#x76D8;&#x4E2D;&#xFF0C;&#x8FD9;&#x65F6;&#x624D;&#x80FD;&#x770B;&#x5230;&#x65B0;&#x5EFA;&#x7684;xml&#x6587;&#x6863;</p><p>&#x8BED;&#x6CD5;&#xFF1A;<br>writexml(file,indent=&#x2019;&#x2019;,addindent=&#x2019;&#x2019;,newl=&#x2019;&#x2019;,endocing=None)</p><p>&#x53C2;&#x6570;&#x8BF4;&#x660E;&#xFF1A;<br>file&#xFF1A;&#x8981;&#x4FDD;&#x5B58;&#x4E3A;&#x7684;&#x6587;&#x4EF6;&#x5BF9;&#x8C61;&#x540D;<br>indent&#xFF1A;&#x6839;&#x8282;&#x70B9;&#x7684;&#x7F29;&#x8FDB;&#x65B9;&#x5F0F;<br>allindent&#xFF1A;&#x5B50;&#x8282;&#x70B9;&#x7684;&#x7F29;&#x8FDB;&#x65B9;&#x5F0F;<br>newl&#xFF1A;&#x9488;&#x5BF9;&#x65B0;&#x884C;&#xFF0C;&#x6307;&#x660E;&#x6362;&#x884C;&#x65B9;&#x5F0F;<br>encoding&#xFF1A;&#x4FDD;&#x5B58;&#x6587;&#x4EF6;&#x7684;&#x7F16;&#x7801;&#x65B9;&#x5F0F;</p><pre><code>import xml.dom.minidom

#&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7A7A;&#x7684;&#x6587;&#x6863;
doc=xml.dom.minidom.Document()

#&#x521B;&#x5EFA;&#x6839;&#x5143;&#x7D20;
root=doc.createElement('booklist')
print('&#x6DFB;&#x52A0;&#x7684;xml&#x6807;&#x7B7E;&#x4E3A;&#xFF1A;',root.tagName)

#&#x8BBE;&#x7F6E;&#x6839;&#x5143;&#x7D20;&#x7684;&#x5C5E;&#x6027;
root.setAttribute('type','science and engineering')

#&#x5C06;&#x6839;&#x8282;&#x70B9;&#x6DFB;&#x52A0;&#x5230;&#x6587;&#x6863;&#x5BF9;&#x8C61;&#x4E2D;
doc.appendChild(root)

#&#x521B;&#x5EFA;&#x5B50;&#x5143;&#x7D20;
book=doc.createElement('book')
#&#x6DFB;&#x52A0;&#x6CE8;&#x91CA;
book.appendChild(doc.createComment('&#x8FD9;&#x662F;&#x6CE8;&#x91CA;'))

#&#x8BBE;&#x7F6E;&#x5B50;&#x5143;&#x7D20;&#x7684;&#x5C5E;&#x6027;
book.setAttribute('category','math')

#&#x5B50;&#x5143;&#x7D20;&#x4E2D;&#x5D4C;&#x5957;&#x5B50;&#x5143;&#x7D20;&#xFF0C;&#x5E76;&#x6DFB;&#x52A0;&#x6587;&#x672C;&#x8282;&#x70B9;
title=doc.createElement('title')
title.appendChild(doc.createTextNode('learning math'))
author=doc.createElement('author')
author.appendChild(doc.createTextNode('&#x5F20;&#x4E09;'))
pageNumber=doc.createElement('pageNumber')
pageNumber.appendChild(doc.createTextNode('561'))

#&#x5C06;&#x5B50;&#x5143;&#x7D20;&#x6DFB;&#x52A0;&#x5230;boot&#x8282;&#x70B9;&#x4E2D;
book.appendChild(title)
book.appendChild(author)
book.appendChild(pageNumber)
#&#x5C06;book&#x8282;&#x70B9;&#x6DFB;&#x52A0;&#x5230;root&#x6839;&#x5143;&#x7D20;&#x4E2D;
root.appendChild(book)

#&#x521B;&#x5EFA;&#x5B50;&#x5143;&#x7D20;
book=doc.createElement('book')
#&#x8BBE;&#x7F6E;&#x5B50;&#x5143;&#x7D20;&#x7684;&#x5C5E;&#x6027;
book.setAttribute('category','python')

title=doc.createElement('title')
title.appendChild(doc.createTextNode('learning python'))

author=doc.createElement('author')
author.appendChild(doc.createTextNode('&#x674E;&#x56DB;'))
pageNumber=doc.createElement('pageNumber')
pageNumber.appendChild(doc.createTextNode('600'))

#&#x5C06;&#x5B50;&#x5143;&#x7D20;&#x6DFB;&#x52A0;&#x5230;boot&#x8282;&#x70B9;&#x4E2D;
book.appendChild(title)
book.appendChild(author)
book.appendChild(pageNumber)
#&#x5C06;book&#x8282;&#x70B9;&#x6DFB;&#x52A0;&#x5230;root&#x6839;&#x5143;&#x7D20;&#x4E2D;
root.appendChild(book)

print(root.toxml())

fp= open(r'D:\pythonProject\xml\new.xml','w',encoding='utf-8')#&#x9700;&#x8981;&#x6307;&#x5B9A;utf-8&#x7684;&#x6587;&#x4EF6;&#x7F16;&#x7801;&#x683C;&#x5F0F;&#xFF0C;&#x4E0D;&#x7136;notepad&#x4E2D;&#x663E;&#x793A;&#x5341;&#x516D;&#x8FDB;&#x5236;
doc.writexml(fp,indent='',addindent='\t',newl='\n',encoding='utf-8')
fp.close()
</code></pre><p>&#x8FD0;&#x884C;&#x663E;&#x793A;&#x7ED3;&#x679C;&#xFF1A;</p><p><img src="https://img-blog.csdnimg.cn/c2479bf335bd4a2cafb5ae47e4310fa8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn5a6H6L-b6Zi25LmL6Lev,size_10,color_FFFFFF,t_70,g_se,x_16"></p><h2>4.3&#x5411;xml&#x4E2D;&#x63D2;&#x5165;&#x65B0;&#x7684;&#x5B50;&#x5143;&#x7D20;</h2><pre><code>import os
import xml.dom.minidom

from xml.dom.minidom import parse

#&#x5BF9;book.xml&#x65B0;&#x589E;&#x4E00;&#x4E2A;&#x5B50;&#x5143;&#x7D20;english&#xFF0C;&#x5E76;&#x5220;&#x9664;math&#x5143;&#x7D20;
xml_file = r'D:\pythonProject\xml\book.xml'

#&#x62FF;&#x5230;&#x6839;&#x8282;&#x70B9;
domTree = parse(xml_file)
rootNode = domTree.documentElement

rootNode.removeChild(rootNode.getElementsByTagName('book')[0])

print(rootNode.toxml())

#&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7A7A;&#x7684;&#x6587;&#x6863;
doc=xml.dom.minidom.Document()

book=doc.createElement('book')
book.setAttribute('category','english')
title=doc.createElement('title')
title.appendChild(doc.createTextNode('learning english'))
author=doc.createElement('author')
author.appendChild(doc.createTextNode('&#x738B;&#x4E94;'))
pageNumber=doc.createElement('pageNumber')
pageNumber.appendChild(doc.createTextNode('328'))

book.appendChild(title)
book.appendChild(author)
book.appendChild(pageNumber)

math_book=rootNode.getElementsByTagName('book')[0]

#insertBefore&#x65B9;&#x6CD5;  &#x7236;&#x8282;&#x70B9;.insertBefore(&#x65B0;&#x8282;&#x70B9;&#xFF0C;&#x7236;&#x8282;&#x70B9;&#x4E2D;&#x7684;&#x5B50;&#x8282;&#x70B9;)
rootNode.insertBefore(book,math_book)
#appendChild&#x5C06;&#x65B0;&#x4EA7;&#x751F;&#x7684;&#x5B50;&#x5143;&#x7D20;&#x5728;&#x6700;&#x540E;&#x63D2;&#x5165;
rootNode.appendChild(book)

print(rootNode.toxml())

with open(xml_file,'w',encoding='utf-8') as fh:
    domTree.writexml(fh,indent='',addindent='\t',newl='',encoding='utf-8')</code></pre><p>&#x8FD0;&#x884C;&#x540E;&#x663E;&#x793A;&#x6548;&#x679C;&#xFF1A;</p><p><img src="https://img-blog.csdnimg.cn/3662f4630bbc4e0fa41b8a2ea3dc3a72.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn5a6H6L-b6Zi25LmL6Lev,size_9,color_FFFFFF,t_70,g_se,x_16"></p><p>&#x6211;&#x4E0A;&#x4F20;&#x7684;&#x4EE3;&#x7801;&#x94FE;&#x63A5;&#xFF1A;</p><p><a class="link-info has-card" href="https://download.csdn.net/download/wjzholmes/71956966" title="Python&#x89E3;&#x6790;&#x521B;&#x5EFA;xml&#x6587;&#x4EF6;&#x7684;&#x4EE3;&#x7801;https://download.csdn.net/download/wjzholmes/71956966"><span class="link-card-box"><span class="link-title">Python&#x89E3;&#x6790;&#x521B;&#x5EFA;xml&#x6587;&#x4EF6;&#x7684;&#x4EE3;&#x7801;https://download.csdn.net/download/wjzholmes/71956966</span><span class="link-link"><img class="link-link-icon" src="https://csdnimg.cn/release/blog_editor_html/release2.1.9/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=M7J4">https://download.csdn.net/download/wjzholmes/71956966</span></span>;</a></p>

Original: https://blog.csdn.net/wjzholmes/article/details/121920698
Author: 大宇进阶之路
Title: xml的学习和使用python解析读取xml文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/672331/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球