Files
hustoj/web/python-docs/library/xml.dom.minidom.html
2025-03-09 17:10:56 +08:00

474 lines
44 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>xml.dom.minidom --- 最小化的 DOM 实现 &#8212; Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="在 Python 3.8.20 文档 中搜索"
href="../_static/opensearch.xml"/>
<link rel="author" title="关于这些文档" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="copyright" title="版权所有" href="../copyright.html" />
<link rel="next" title="xml.dom.pulldom --- 支持构建部分 DOM 树" href="xml.dom.pulldom.html" />
<link rel="prev" title="xml.dom --- 文档对象模型 API" href="xml.dom.html" />
<link rel="canonical" href="https://docs.python.org/3/library/xml.dom.minidom.html" />
<style>
@media only screen {
table.full-width-table {
width: 100%;
}
}
</style>
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/menu.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<nav class="nav-content" role="navigation">
<a href="https://www.python.org/" class="nav-logo">
<img src="../_static/py.svg" alt="Logo"/>
</a>
<div class="version_switcher_placeholder"></div>
<form role="search" class="search" action="../search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero"
d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" fill="#444"></path>
</svg>
<input type="text" name="q" aria-label="快速搜索"/>
<input type="submit" value="转向"/>
</form>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code> --- 最小化的 DOM 实现</a><ul>
<li><a class="reference internal" href="#dom-objects">DOM 对象</a></li>
<li><a class="reference internal" href="#dom-example">DOM 示例</a></li>
<li><a class="reference internal" href="#minidom-and-the-dom-standard">minidom 和 DOM 标准</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="xml.dom.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom</span></code> --- 文档对象模型 API</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="xml.dom.pulldom.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.pulldom</span></code> --- 支持构建部分 DOM 树</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/xml.dom.minidom.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</nav>
</div>
</div>
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
这个文档所针对的是一个已不再受支持的 Python 旧版本。
你应当升级版本,并阅读
<a href="/3/library/xml.dom.minidom.html"> Python 当前稳定版本的文档</a>.
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="xml.dom.pulldom.html" title="xml.dom.pulldom --- 支持构建部分 DOM 树"
accesskey="N">下一页</a> |</li>
<li class="right" >
<a href="xml.dom.html" title="xml.dom --- 文档对象模型 API"
accesskey="P">上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="markup.html" accesskey="U">结构化标记处理工具</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-xml.dom.minidom">
<span id="xml-dom-minidom-minimal-dom-implementation"></span><h1><a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> --- 最小化的 DOM 实现<a class="headerlink" href="#module-xml.dom.minidom" title="永久链接至标题"></a></h1>
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/xml/dom/minidom.py">Lib/xml/dom/minidom.py</a></p>
<hr class="docutils" />
<p><a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 是文档对象模型接口的最小化实现,具有与其他语言类似的 API。 它的目标是比完整 DOM 更简单并且更为小巧。 对于 DOM 还不十分熟悉的用户则应当考虑改用 <a class="reference internal" href="xml.etree.elementtree.html#module-xml.etree.ElementTree" title="xml.etree.ElementTree: Implementation of the ElementTree API."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.etree.ElementTree</span></code></a> 模块来进行 XML 处理。</p>
<div class="admonition warning">
<p class="admonition-title">警告</p>
<p><a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 <a class="reference internal" href="xml.html#xml-vulnerabilities"><span class="std std-ref">XML 漏洞</span></a></p>
</div>
<p>DOM 应用程序通常会从将某个 XML 解析为 DOM 开始。 使用 <a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 时,这是通过各种解析函数来完成的:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xml.dom.minidom</span> <span class="kn">import</span> <span class="n">parse</span><span class="p">,</span> <span class="n">parseString</span>
<span class="n">dom1</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="s1">&#39;c:</span><span class="se">\\</span><span class="s1">temp</span><span class="se">\\</span><span class="s1">mydata.xml&#39;</span><span class="p">)</span> <span class="c1"># parse an XML file by name</span>
<span class="n">datasource</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;c:</span><span class="se">\\</span><span class="s1">temp</span><span class="se">\\</span><span class="s1">mydata.xml&#39;</span><span class="p">)</span>
<span class="n">dom2</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">datasource</span><span class="p">)</span> <span class="c1"># parse an open file</span>
<span class="n">dom3</span> <span class="o">=</span> <span class="n">parseString</span><span class="p">(</span><span class="s1">&#39;&lt;myxml&gt;Some data&lt;empty/&gt; some more data&lt;/myxml&gt;&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p><a class="reference internal" href="#xml.dom.minidom.parse" title="xml.dom.minidom.parse"><code class="xref py py-func docutils literal notranslate"><span class="pre">parse()</span></code></a> 函数可接受一个文件名或者打开的文件对象。</p>
<dl class="function">
<dt id="xml.dom.minidom.parse">
<code class="sig-prename descclassname">xml.dom.minidom.</code><code class="sig-name descname">parse</code><span class="sig-paren">(</span><em class="sig-param">filename_or_file</em>, <em class="sig-param">parser=None</em>, <em class="sig-param">bufsize=None</em><span class="sig-paren">)</span><a class="headerlink" href="#xml.dom.minidom.parse" title="永久链接至目标"></a></dt>
<dd><p>根据给定的输入返回一个 <code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code><em>filename_or_file</em> 可以是一个文件名,或是一个文件型对象。 如果给定 <em>parser</em> 则它必须是一个 SAX2 解析器对象。 此函数将修改解析器的处理程序并激活命名空间支持;其他解析器配置(例如设置一个实体求解器)必须已经提前完成。</p>
</dd></dl>
<p>如果你将 XML 存放为字符串形式,则可以改用 <a class="reference internal" href="#xml.dom.minidom.parseString" title="xml.dom.minidom.parseString"><code class="xref py py-func docutils literal notranslate"><span class="pre">parseString()</span></code></a> 函数:</p>
<dl class="function">
<dt id="xml.dom.minidom.parseString">
<code class="sig-prename descclassname">xml.dom.minidom.</code><code class="sig-name descname">parseString</code><span class="sig-paren">(</span><em class="sig-param">string</em>, <em class="sig-param">parser=None</em><span class="sig-paren">)</span><a class="headerlink" href="#xml.dom.minidom.parseString" title="永久链接至目标"></a></dt>
<dd><p>返回一个代表 <em>string</em><code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code>。 此方法会为指定字符串创建一个 <a class="reference internal" href="io.html#io.StringIO" title="io.StringIO"><code class="xref py py-class docutils literal notranslate"><span class="pre">io.StringIO</span></code></a> 对象并将其传递给 <a class="reference internal" href="#xml.dom.minidom.parse" title="xml.dom.minidom.parse"><code class="xref py py-func docutils literal notranslate"><span class="pre">parse()</span></code></a></p>
</dd></dl>
<p>两个函数均返回一个代表文档内容的 <code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code> 对象。object representing the content of the document.</p>
<p><a class="reference internal" href="#xml.dom.minidom.parse" title="xml.dom.minidom.parse"><code class="xref py py-func docutils literal notranslate"><span class="pre">parse()</span></code></a><a class="reference internal" href="#xml.dom.minidom.parseString" title="xml.dom.minidom.parseString"><code class="xref py py-func docutils literal notranslate"><span class="pre">parseString()</span></code></a> 函数所做的是将 XML 解析器连接到一个 &quot;DOM 构建器&quot;,它可以从任意 SAX 解析器接收解析事件并将其转换为 DOM 树结构。 这两个函数的名称可能有些误导性,但在学习此接口时是很容易掌握的。 文档解析操作将在这两个函数返回之前完成;简单地说这两个函数本身并不提供解析器实现。</p>
<p>你也可以通过在一个 &quot;DOM 实现&quot; 对象上调用方法来创建 <code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code>。 此对象可通过调用 <a class="reference internal" href="xml.dom.html#module-xml.dom" title="xml.dom: Document Object Model API for Python."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom</span></code></a> 包或者 <a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 模块中的 <code class="xref py py-func docutils literal notranslate"><span class="pre">getDOMImplementation()</span></code> 函数来获取。 一旦你获得了一个 <code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code>,你就可以向它添加子节点来填充 DOM:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xml.dom.minidom</span> <span class="kn">import</span> <span class="n">getDOMImplementation</span>
<span class="n">impl</span> <span class="o">=</span> <span class="n">getDOMImplementation</span><span class="p">()</span>
<span class="n">newdoc</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="n">createDocument</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;some_tag&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">top_element</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">documentElement</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">newdoc</span><span class="o">.</span><span class="n">createTextNode</span><span class="p">(</span><span class="s1">&#39;Some textual content.&#39;</span><span class="p">)</span>
<span class="n">top_element</span><span class="o">.</span><span class="n">appendChild</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
</pre></div>
</div>
<p>一旦你得到了 DOM 文档对象,你就可以通过其属性和方法访问对应 XML 文档的各个部分。 这些属性定义在 DOM 规格说明当中;文档对象的主要特征属性是 <code class="xref py py-attr docutils literal notranslate"><span class="pre">documentElement</span></code>。 它给出了 XML 文档中的主元素:即包含了所有其他元素的元素。 以下是一个示例程序:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">dom3</span> <span class="o">=</span> <span class="n">parseString</span><span class="p">(</span><span class="s2">&quot;&lt;myxml&gt;Some data&lt;/myxml&gt;&quot;</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">dom3</span><span class="o">.</span><span class="n">documentElement</span><span class="o">.</span><span class="n">tagName</span> <span class="o">==</span> <span class="s2">&quot;myxml&quot;</span>
</pre></div>
</div>
<p>当你完成对一个 DOM 树的处理时,你可以选择调用 <code class="xref py py-meth docutils literal notranslate"><span class="pre">unlink()</span></code> 方法以鼓励尽早清除不再需要的对象。 <code class="xref py py-meth docutils literal notranslate"><span class="pre">unlink()</span></code><a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 针对 DOM API 的专属扩展,它会将特定节点及其下级标记为不再有用。 在其他情况下Python 的垃圾回收器将负责最终处理树结构中的对象。</p>
<div class="admonition seealso">
<p class="admonition-title">参见</p>
<dl class="simple">
<dt><a class="reference external" href="https://www.w3.org/TR/REC-DOM-Level-1/">文档对象模型 (DOM) 第 1 层级规格说明</a></dt><dd><p><a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 所支持的 W3C 针对 DOM 的建议。</p>
</dd>
</dl>
</div>
<section id="dom-objects">
<span id="minidom-objects"></span><h2>DOM 对象<a class="headerlink" href="#dom-objects" title="永久链接至标题"></a></h2>
<p>Python 的 DOM API 定义被作为 <a class="reference internal" href="xml.dom.html#module-xml.dom" title="xml.dom: Document Object Model API for Python."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom</span></code></a> 模块文档的一部分给出。 这一节列出了该 API 和 <a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 之间的差异。</p>
<dl class="method">
<dt id="xml.dom.minidom.Node.unlink">
<code class="sig-prename descclassname">Node.</code><code class="sig-name descname">unlink</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xml.dom.minidom.Node.unlink" title="永久链接至目标"></a></dt>
<dd><p>破坏 DOM 的内部引用以便它能在没有循环 GC 的 Python 版本上垃圾回收器回收。 即使在循环 GC 可用的时候,使用此方法也可让大量内存更快变为可用,因此当 DOM 对象不再被需要时尽早调用它们的这个方法是很好的做法。 此方法只须在 <code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code> 对象上调用,但也可以在下级节点上调用以丢弃该节点的下级节点。</p>
<p>你可以通过使用 <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> 语句来避免显式调用此方法。 以下代码会在 <code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code> 代码块退出时自动取消链接 <em>dom</em>:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">xml</span><span class="o">.</span><span class="n">dom</span><span class="o">.</span><span class="n">minidom</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">datasource</span><span class="p">)</span> <span class="k">as</span> <span class="n">dom</span><span class="p">:</span>
<span class="o">...</span> <span class="c1"># Work with dom.</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="xml.dom.minidom.Node.writexml">
<code class="sig-prename descclassname">Node.</code><code class="sig-name descname">writexml</code><span class="sig-paren">(</span><em class="sig-param">writer</em>, <em class="sig-param">indent=&quot;&quot;</em>, <em class="sig-param">addindent=&quot;&quot;</em>, <em class="sig-param">newl=&quot;&quot;</em><span class="sig-paren">)</span><a class="headerlink" href="#xml.dom.minidom.Node.writexml" title="永久链接至目标"></a></dt>
<dd><p>将 XML 写入到写入器对象。 写入器接受文本而非字节串作为输入,它应当具有与文件对象接口相匹配的 <code class="xref py py-meth docutils literal notranslate"><span class="pre">write()</span></code> 方法。 <em>indent</em> 形参是当前节点的缩进层级。 <em>addindent</em> 形参是用于当前节点的下级节点的缩进量。 <em>newl</em> 形参指定用于一行结束的字符串。</p>
<p>对于 <code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code> 节点,可以使用附加的关键字参数 <em>encoding</em> 来指定 XML 标头的编码格式字段。</p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.8 版更改: </span><a class="reference internal" href="#xml.dom.minidom.Node.writexml" title="xml.dom.minidom.Node.writexml"><code class="xref py py-meth docutils literal notranslate"><span class="pre">writexml()</span></code></a> 方法现在会保留用户指定的属性顺序。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="xml.dom.minidom.Node.toxml">
<code class="sig-prename descclassname">Node.</code><code class="sig-name descname">toxml</code><span class="sig-paren">(</span><em class="sig-param">encoding=None</em><span class="sig-paren">)</span><a class="headerlink" href="#xml.dom.minidom.Node.toxml" title="永久链接至目标"></a></dt>
<dd><p>返回一个包含 XML DOM 节点所代表的 XML 的字符串或字节串。</p>
<p>带有显式的 <em>encoding</em> <a class="footnote-reference brackets" href="#id3" id="id1">1</a> 参数时,结果为使用指定编码格式的字节串。 没有 <em>encoding</em> 参数时,结果为 Unicode 字符串,并且结果字符串中的 XML 声明将不指定编码格式。 使用 UTF-8 以外的编码格式对此字符串进行编码通常是不正确的,因为 UTF-8 是 XML 的默认编码格式。</p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.8 版更改: </span><a class="reference internal" href="#xml.dom.minidom.Node.toxml" title="xml.dom.minidom.Node.toxml"><code class="xref py py-meth docutils literal notranslate"><span class="pre">toxml()</span></code></a> 方法现在会保留用户指定的属性顺序。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="xml.dom.minidom.Node.toprettyxml">
<code class="sig-prename descclassname">Node.</code><code class="sig-name descname">toprettyxml</code><span class="sig-paren">(</span><em class="sig-param">indent=&quot;\t&quot;</em>, <em class="sig-param">newl=&quot;\n&quot;</em>, <em class="sig-param">encoding=None</em><span class="sig-paren">)</span><a class="headerlink" href="#xml.dom.minidom.Node.toprettyxml" title="永久链接至目标"></a></dt>
<dd><p>返回文档的美化打印版本。 <em>indent</em> 指定缩进字符串并默认为制表符;<em>newl</em> 指定标示每行结束的字符串并默认为 <code class="docutils literal notranslate"><span class="pre">\n</span></code></p>
<p><em>encoding</em> 参数的行为类似于 <a class="reference internal" href="#xml.dom.minidom.Node.toxml" title="xml.dom.minidom.Node.toxml"><code class="xref py py-meth docutils literal notranslate"><span class="pre">toxml()</span></code></a> 的对应参数。</p>
<div class="versionchanged">
<p><span class="versionmodified changed">在 3.8 版更改: </span><a class="reference internal" href="#xml.dom.minidom.Node.toprettyxml" title="xml.dom.minidom.Node.toprettyxml"><code class="xref py py-meth docutils literal notranslate"><span class="pre">toprettyxml()</span></code></a> 方法现在会保留用户指定的属性顺序。</p>
</div>
</dd></dl>
</section>
<section id="dom-example">
<span id="id2"></span><h2>DOM 示例<a class="headerlink" href="#dom-example" title="永久链接至标题"></a></h2>
<p>此示例程序是个相当实际的简单程序示例。 在这个特定情况中,我们没有过多地利用 DOM 的灵活性。</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xml.dom.minidom</span>
<span class="n">document</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
<span class="s2">&lt;slideshow&gt;</span>
<span class="s2">&lt;title&gt;Demo slideshow&lt;/title&gt;</span>
<span class="s2">&lt;slide&gt;&lt;title&gt;Slide title&lt;/title&gt;</span>
<span class="s2">&lt;point&gt;This is a demo&lt;/point&gt;</span>
<span class="s2">&lt;point&gt;Of a program for processing slides&lt;/point&gt;</span>
<span class="s2">&lt;/slide&gt;</span>
<span class="s2">&lt;slide&gt;&lt;title&gt;Another demo slide&lt;/title&gt;</span>
<span class="s2">&lt;point&gt;It is important&lt;/point&gt;</span>
<span class="s2">&lt;point&gt;To have more than&lt;/point&gt;</span>
<span class="s2">&lt;point&gt;one slide&lt;/point&gt;</span>
<span class="s2">&lt;/slide&gt;</span>
<span class="s2">&lt;/slideshow&gt;</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">dom</span> <span class="o">=</span> <span class="n">xml</span><span class="o">.</span><span class="n">dom</span><span class="o">.</span><span class="n">minidom</span><span class="o">.</span><span class="n">parseString</span><span class="p">(</span><span class="n">document</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getText</span><span class="p">(</span><span class="n">nodelist</span><span class="p">):</span>
<span class="n">rc</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodelist</span><span class="p">:</span>
<span class="k">if</span> <span class="n">node</span><span class="o">.</span><span class="n">nodeType</span> <span class="o">==</span> <span class="n">node</span><span class="o">.</span><span class="n">TEXT_NODE</span><span class="p">:</span>
<span class="n">rc</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">rc</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">handleSlideshow</span><span class="p">(</span><span class="n">slideshow</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;html&gt;&quot;</span><span class="p">)</span>
<span class="n">handleSlideshowTitle</span><span class="p">(</span><span class="n">slideshow</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;title&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">slides</span> <span class="o">=</span> <span class="n">slideshow</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;slide&quot;</span><span class="p">)</span>
<span class="n">handleToc</span><span class="p">(</span><span class="n">slides</span><span class="p">)</span>
<span class="n">handleSlides</span><span class="p">(</span><span class="n">slides</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;/html&gt;&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">handleSlides</span><span class="p">(</span><span class="n">slides</span><span class="p">):</span>
<span class="k">for</span> <span class="n">slide</span> <span class="ow">in</span> <span class="n">slides</span><span class="p">:</span>
<span class="n">handleSlide</span><span class="p">(</span><span class="n">slide</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">handleSlide</span><span class="p">(</span><span class="n">slide</span><span class="p">):</span>
<span class="n">handleSlideTitle</span><span class="p">(</span><span class="n">slide</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;title&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">handlePoints</span><span class="p">(</span><span class="n">slide</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;point&quot;</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">handleSlideshowTitle</span><span class="p">(</span><span class="n">title</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;title&gt;</span><span class="si">%s</span><span class="s2">&lt;/title&gt;&quot;</span> <span class="o">%</span> <span class="n">getText</span><span class="p">(</span><span class="n">title</span><span class="o">.</span><span class="n">childNodes</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">handleSlideTitle</span><span class="p">(</span><span class="n">title</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;h2&gt;</span><span class="si">%s</span><span class="s2">&lt;/h2&gt;&quot;</span> <span class="o">%</span> <span class="n">getText</span><span class="p">(</span><span class="n">title</span><span class="o">.</span><span class="n">childNodes</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">handlePoints</span><span class="p">(</span><span class="n">points</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;ul&gt;&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="n">points</span><span class="p">:</span>
<span class="n">handlePoint</span><span class="p">(</span><span class="n">point</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;/ul&gt;&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">handlePoint</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;li&gt;</span><span class="si">%s</span><span class="s2">&lt;/li&gt;&quot;</span> <span class="o">%</span> <span class="n">getText</span><span class="p">(</span><span class="n">point</span><span class="o">.</span><span class="n">childNodes</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">handleToc</span><span class="p">(</span><span class="n">slides</span><span class="p">):</span>
<span class="k">for</span> <span class="n">slide</span> <span class="ow">in</span> <span class="n">slides</span><span class="p">:</span>
<span class="n">title</span> <span class="o">=</span> <span class="n">slide</span><span class="o">.</span><span class="n">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;title&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;&lt;p&gt;</span><span class="si">%s</span><span class="s2">&lt;/p&gt;&quot;</span> <span class="o">%</span> <span class="n">getText</span><span class="p">(</span><span class="n">title</span><span class="o">.</span><span class="n">childNodes</span><span class="p">))</span>
<span class="n">handleSlideshow</span><span class="p">(</span><span class="n">dom</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="minidom-and-the-dom-standard">
<span id="minidom-and-dom"></span><h2>minidom 和 DOM 标准<a class="headerlink" href="#minidom-and-the-dom-standard" title="永久链接至标题"></a></h2>
<p><a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 模块实际上是兼容 DOM 1.0 的 DOM 并带有部分 DOM 2 特性(主要是命名空间特性)。</p>
<p>Python 中 DOM 接口的用法十分直观。 会应用下列映射规则:</p>
<ul class="simple">
<li><p>接口是通过实例对象来访问的。 应用程序不应实例化这些类本身;它们应当使用 <code class="xref py py-class docutils literal notranslate"><span class="pre">Document</span></code> 对象提供的创建器函数。 派生的接口支持上级接口的所有操作(和属性),并添加了新的操作。</p></li>
<li><p>操作以方法的形式使用。 因由 DOM 只使用 <a class="reference internal" href="../reference/expressions.html#in"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">in</span></code></a> 形参,参数是以正常顺序传入的(从左至右)。 不存在可选参数。 <code class="docutils literal notranslate"><span class="pre">void</span></code> 操作返回 <code class="docutils literal notranslate"><span class="pre">None</span></code></p></li>
<li><p>IDL 属性会映射到实例属性。 为了兼容针对 Python 的 OMG IDL 语言映射,属性 <code class="docutils literal notranslate"><span class="pre">foo</span></code> 也可通过访问器方法 <code class="xref py py-meth docutils literal notranslate"><span class="pre">_get_foo()</span></code><code class="xref py py-meth docutils literal notranslate"><span class="pre">_set_foo()</span></code> 来访问。 <code class="docutils literal notranslate"><span class="pre">readonly</span></code> 属性不可被修改;运行时并不强制要求这一点。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">short</span> <span class="pre">int</span></code>, <code class="docutils literal notranslate"><span class="pre">unsigned</span> <span class="pre">int</span></code>, <code class="docutils literal notranslate"><span class="pre">unsigned</span> <span class="pre">long</span> <span class="pre">long</span></code><code class="docutils literal notranslate"><span class="pre">boolean</span></code> 类型都会映射为 Python 整数类型。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">DOMString</span></code> 类型会映射为 Python 字符串。 <a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 支持字节串或字符串,但通常是产生字符串。 <code class="docutils literal notranslate"><span class="pre">DOMString</span></code> 类型的值也可以为 <code class="docutils literal notranslate"><span class="pre">None</span></code>W3C 的 DOM 规格说明允许其具有 IDL <code class="docutils literal notranslate"><span class="pre">null</span></code> 值。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">const</span></code> 声明会映射为它们各自的作用域内的变量 (例如 <code class="docutils literal notranslate"><span class="pre">xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE</span></code>);它们不可被修改。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">DOMException</span></code> 目前不被 <a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 所支持。 <a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 会改为使用标准 Python 异常例如 <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a><a class="reference internal" href="exceptions.html#AttributeError" title="AttributeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">AttributeError</span></code></a></p></li>
<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">NodeList</span></code> 对象是使用 Python 内置列表类型来实现的。 这些对象提供了 DOM 规格说明中定义的接口,但在较早版本的 Python 中它们不支持官方 API。 相比在 W3C 建议中定义的接口,它们要更加的 &quot;Pythonic&quot;</p></li>
</ul>
<p>下列接口未在 <a class="reference internal" href="#module-xml.dom.minidom" title="xml.dom.minidom: Minimal Document Object Model (DOM) implementation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code></a> 中实现:</p>
<ul class="simple">
<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">DOMTimeStamp</span></code></p></li>
<li><p><code class="xref py py-class docutils literal notranslate"><span class="pre">EntityReference</span></code></p></li>
</ul>
<p>这些接口所反映的 XML 文档信息对于大多数 DOM 用户来说没有什么帮助。</p>
<p class="rubric">备注</p>
<dl class="footnote brackets">
<dt class="label" id="id3"><span class="brackets"><a class="fn-backref" href="#id1">1</a></span></dt>
<dd><p>包括在 XML 输出中的编码格式名称应当遵循适当的标准。 例如,&quot;UTF-8&quot; 是有效的,但 &quot;UTF8&quot; 在 XML 文档的声明中是无效的,即使 Python 接受其作为编码格式名称。 详情参见 <a class="reference external" href="https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl">https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl</a><a class="reference external" href="https://www.iana.org/assignments/character-sets/character-sets.xhtml">https://www.iana.org/assignments/character-sets/character-sets.xhtml</a></p>
</dd>
</dl>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">目录</a></h3>
<ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.minidom</span></code> --- 最小化的 DOM 实现</a><ul>
<li><a class="reference internal" href="#dom-objects">DOM 对象</a></li>
<li><a class="reference internal" href="#dom-example">DOM 示例</a></li>
<li><a class="reference internal" href="#minidom-and-the-dom-standard">minidom 和 DOM 标准</a></li>
</ul>
</li>
</ul>
<h4>上一个主题</h4>
<p class="topless"><a href="xml.dom.html"
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom</span></code> --- 文档对象模型 API</a></p>
<h4>下一个主题</h4>
<p class="topless"><a href="xml.dom.pulldom.html"
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xml.dom.pulldom</span></code> --- 支持构建部分 DOM 树</a></p>
<div role="note" aria-label="source link">
<h3>本页</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">报告 Bug</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/xml.dom.minidom.rst"
rel="nofollow">显示源代码
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>导航</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="总目录"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python 模块索引"
>模块</a> |</li>
<li class="right" >
<a href="xml.dom.pulldom.html" title="xml.dom.pulldom --- 支持构建部分 DOM 树"
>下一页</a> |</li>
<li class="right" >
<a href="xml.dom.html" title="xml.dom --- 文档对象模型 API"
>上一页</a> |</li>
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
</li>
<li id="cpython-language-and-version">
<a href="../index.html">3.8.20 Documentation</a> &#187;
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="markup.html" >结构化标记处理工具</a> &#187;</li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
<input type="submit" value="转向" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
|
</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
<br />
This page is licensed under the Python Software Foundation License Version 2.
<br />
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br />
<br />
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
<br />
最后更新于 12月 09, 2024.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>