mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
1 line
17 KiB
HTML
1 line
17 KiB
HTML
<div class="body" role="main"><div class="section" id="module-xml.sax"><h1><span class="yiyi-st" id="yiyi-10">20.9. <a class="reference internal" href="#module-xml.sax" title="xml.sax: Package containing SAX2 base classes and convenience functions."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax</span></code></a> - 支持SAX2解析器</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/xml/sax/__init__.py">Lib / xml / sax / __ init __。py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-xml.sax" title="xml.sax: Package containing SAX2 base classes and convenience functions."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax</span></code></a>包提供了许多实现Python的Simple API for XML(SAX)接口的模块。</span><span class="yiyi-st" id="yiyi-13">软件包本身提供SAX异常和SAX API的用户最常用的方便功能。</span></p><div class="admonition warning"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-14">警告</span></p><p class="last"><span class="yiyi-st" id="yiyi-15"><a class="reference internal" href="#module-xml.sax" title="xml.sax: Package containing SAX2 base classes and convenience functions."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax</span></code></a>模块对于恶意构造的数据不安全。</span><span class="yiyi-st" id="yiyi-16">如果需要解析不受信任或未经身份验证的数据,请参阅<a class="reference internal" href="xml.html#xml-vulnerabilities"><span>XML vulnerabilities</span></a>。</span></p></div><p><span class="yiyi-st" id="yiyi-17">方便的功能有:</span></p><dl class="function"><dt id="xml.sax.make_parser"><span class="yiyi-st" id="yiyi-18"> <code class="descclassname">xml.sax.</code><code class="descname">make_parser</code><span class="sig-paren">(</span><em>parser_list=[]</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-19">创建并返回SAX <a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.XMLReader" title="xml.sax.xmlreader.XMLReader"><code class="xref py py-class docutils literal"><span class="pre">XMLReader</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-20">将使用找到的第一个解析器。</span><span class="yiyi-st" id="yiyi-21">如果提供了<em>parser_list</em>,它必须是一串字符串,它命名具有名为<code class="xref py py-func docutils literal"><span class="pre">create_parser()</span></code>的函数的模块。</span><span class="yiyi-st" id="yiyi-22">在<em>parser_list</em>中列出的模块将在默认的解析器列表中的模块之前使用。</span></p></dd></dl><dl class="function"><dt id="xml.sax.parse"><span class="yiyi-st" id="yiyi-23"> <code class="descclassname">xml.sax.</code><code class="descname">parse</code><span class="sig-paren">(</span><em>filename_or_stream</em>, <em>handler</em>, <em>error_handler=handler.ErrorHandler()</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-24">创建一个SAX解析器并使用它来解析文档。</span><span class="yiyi-st" id="yiyi-25">作为<em>filename_or_stream</em>传入的文档可以是文件名或文件对象。</span><span class="yiyi-st" id="yiyi-26"><em>处理程序</em>参数需要是SAX <a class="reference internal" href="xml.sax.handler.html#xml.sax.handler.ContentHandler" title="xml.sax.handler.ContentHandler"><code class="xref py py-class docutils literal"><span class="pre">ContentHandler</span></code></a>实例。</span><span class="yiyi-st" id="yiyi-27">如果给出<em>error_handler</em>,它必须是SAX <a class="reference internal" href="xml.sax.handler.html#xml.sax.handler.ErrorHandler" title="xml.sax.handler.ErrorHandler"><code class="xref py py-class docutils literal"><span class="pre">ErrorHandler</span></code></a>实例;如果省略,将对所有错误引发<a class="reference internal" href="#xml.sax.SAXParseException" title="xml.sax.SAXParseException"><code class="xref py py-exc docutils literal"><span class="pre">SAXParseException</span></code></a>。</span><span class="yiyi-st" id="yiyi-28">没有返回值;所有工作必须由传递的<em>处理程序</em>完成。</span></p></dd></dl><dl class="function"><dt id="xml.sax.parseString"><span class="yiyi-st" id="yiyi-29"> <code class="descclassname">xml.sax.</code><code class="descname">parseString</code><span class="sig-paren">(</span><em>string</em>, <em>handler</em>, <em>error_handler=handler.ErrorHandler()</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-30">类似于<a class="reference internal" href="#xml.sax.parse" title="xml.sax.parse"><code class="xref py py-func docutils literal"><span class="pre">parse()</span></code></a>,但是从作为参数接收的缓冲区<em>字符串</em>解析。</span><span class="yiyi-st" id="yiyi-31"><em>string</em>必须是<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a>实例或<a class="reference internal" href="../glossary.html#term-bytes-like-object"><span class="xref std std-term">bytes-like object</span></a>。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-32"><span class="versionmodified">在版本3.5中已更改:</span>添加了对<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a>实例的支持。</span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-33">典型的SAX应用程序使用三种对象:读取器,处理程序和输入源。</span><span class="yiyi-st" id="yiyi-34">在本文中,“读者”是解析器的另一个术语,即</span><span class="yiyi-st" id="yiyi-35">从输入源读取字节或字符的一些代码,并且产生事件序列。</span><span class="yiyi-st" id="yiyi-36">然后事件被分配给处理程序对象,即</span><span class="yiyi-st" id="yiyi-37">读取器调用处理程序上的方法。</span><span class="yiyi-st" id="yiyi-38">因此,SAX应用程序必须获取reader对象,创建或打开输入源,创建处理程序,并将这些对象连接在一起。</span><span class="yiyi-st" id="yiyi-39">作为准备的最后一步,读者被调用来解析输入。</span><span class="yiyi-st" id="yiyi-40">在解析期间,基于来自输入数据的结构和句法事件来调用处理程序对象上的方法。</span></p><p><span class="yiyi-st" id="yiyi-41">对于这些对象,只有接口是相关的;它们通常不会由应用程序本身实例化。</span><span class="yiyi-st" id="yiyi-42">由于Python没有明确的接口概念,它们被正式引入为类,但应用程序可能使用不从提供的类继承的实现。</span><span class="yiyi-st" id="yiyi-43">定义<a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.InputSource" title="xml.sax.xmlreader.InputSource"><code class="xref py py-class docutils literal"><span class="pre">InputSource</span></code></a>,<a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.Locator" title="xml.sax.xmlreader.Locator"><code class="xref py py-class docutils literal"><span class="pre">Locator</span></code></a>,<code class="xref py py-class docutils literal"><span class="pre">Attributes</span></code>,<code class="xref py py-class docutils literal"><span class="pre">AttributesNS</span></code>和<a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.XMLReader" title="xml.sax.xmlreader.XMLReader"><code class="xref py py-class docutils literal"><span class="pre">XMLReader</span></code></a>模块<a class="reference internal" href="xml.sax.reader.html#module-xml.sax.xmlreader" title="xml.sax.xmlreader: Interface which SAX-compliant XML parsers must implement."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax.xmlreader</span></code></a>。</span><span class="yiyi-st" id="yiyi-44">处理程序接口在<a class="reference internal" href="xml.sax.handler.html#module-xml.sax.handler" title="xml.sax.handler: Base classes for SAX event handlers."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax.handler</span></code></a>中定义。</span><span class="yiyi-st" id="yiyi-45">为方便起见,<a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.InputSource" title="xml.sax.xmlreader.InputSource"><code class="xref py py-class docutils literal"><span class="pre">InputSource</span></code></a>(通常直接实例化)和处理程序类也可从<a class="reference internal" href="#module-xml.sax" title="xml.sax: Package containing SAX2 base classes and convenience functions."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax</span></code></a>获得。</span><span class="yiyi-st" id="yiyi-46">这些接口如下所述。</span></p><p><span class="yiyi-st" id="yiyi-47">除了这些类之外,<a class="reference internal" href="#module-xml.sax" title="xml.sax: Package containing SAX2 base classes and convenience functions."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax</span></code></a>还提供以下异常类。</span></p><dl class="exception"><dt id="xml.sax.SAXException"><span class="yiyi-st" id="yiyi-48"> <em class="property">exception </em><code class="descclassname">xml.sax.</code><code class="descname">SAXException</code><span class="sig-paren">(</span><em>msg</em>, <em>exception=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-49">封装XML错误或警告。</span><span class="yiyi-st" id="yiyi-50">此类可以包含来自XML解析器或应用程序的基本错误或警告信息:可以将其子类化以提供其他功能或添加本地化。</span><span class="yiyi-st" id="yiyi-51">请注意,虽然<a class="reference internal" href="xml.sax.handler.html#xml.sax.handler.ErrorHandler" title="xml.sax.handler.ErrorHandler"><code class="xref py py-class docutils literal"><span class="pre">ErrorHandler</span></code></a>接口中定义的处理程序接收到此异常的实例,但不需要实际引发异常 - 它也可用作信息的容器。</span></p><p><span class="yiyi-st" id="yiyi-52">实例化时,<em>msg</em>应该是人为可读的错误描述。</span><span class="yiyi-st" id="yiyi-53">可选的<em>异常</em>参数(如果给出)应为<code class="docutils literal"><span class="pre">None</span></code>或者由解析代码捕获并作为信息传递的异常。</span></p><p><span class="yiyi-st" id="yiyi-54">这是其他SAX异常类的基类。</span></p></dd></dl><dl class="exception"><dt id="xml.sax.SAXParseException"><span class="yiyi-st" id="yiyi-55"> <em class="property">exception </em><code class="descclassname">xml.sax.</code><code class="descname">SAXParseException</code><span class="sig-paren">(</span><em>msg</em>, <em>exception</em>, <em>locator</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-56">在解析错误时引发的<a class="reference internal" href="#xml.sax.SAXException" title="xml.sax.SAXException"><code class="xref py py-exc docutils literal"><span class="pre">SAXException</span></code></a>子类。</span><span class="yiyi-st" id="yiyi-57">将此类的实例传递给SAX <a class="reference internal" href="xml.sax.handler.html#xml.sax.handler.ErrorHandler" title="xml.sax.handler.ErrorHandler"><code class="xref py py-class docutils literal"><span class="pre">ErrorHandler</span></code></a>接口的方法,以提供有关解析错误的信息。</span><span class="yiyi-st" id="yiyi-58">此类支持SAX <a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.Locator" title="xml.sax.xmlreader.Locator"><code class="xref py py-class docutils literal"><span class="pre">Locator</span></code></a>接口以及<a class="reference internal" href="#xml.sax.SAXException" title="xml.sax.SAXException"><code class="xref py py-class docutils literal"><span class="pre">SAXException</span></code></a>接口。</span></p></dd></dl><dl class="exception"><dt id="xml.sax.SAXNotRecognizedException"><span class="yiyi-st" id="yiyi-59"> <em class="property">exception </em><code class="descclassname">xml.sax.</code><code class="descname">SAXNotRecognizedException</code><span class="sig-paren">(</span><em>msg</em>, <em>exception=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-60">当SAX <a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.XMLReader" title="xml.sax.xmlreader.XMLReader"><code class="xref py py-class docutils literal"><span class="pre">XMLReader</span></code></a>遇到无法识别的要素或属性时引发的<a class="reference internal" href="#xml.sax.SAXException" title="xml.sax.SAXException"><code class="xref py py-exc docutils literal"><span class="pre">SAXException</span></code></a>子类。</span><span class="yiyi-st" id="yiyi-61">SAX应用程序和扩展可以使用此类用于类似的目的。</span></p></dd></dl><dl class="exception"><dt id="xml.sax.SAXNotSupportedException"><span class="yiyi-st" id="yiyi-62"> <em class="property">exception </em><code class="descclassname">xml.sax.</code><code class="descname">SAXNotSupportedException</code><span class="sig-paren">(</span><em>msg</em>, <em>exception=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-63">当要求SAX <a class="reference internal" href="xml.sax.reader.html#xml.sax.xmlreader.XMLReader" title="xml.sax.xmlreader.XMLReader"><code class="xref py py-class docutils literal"><span class="pre">XMLReader</span></code></a>启用不支持的功能时,或者将属性设置为实现不支持的值时,引发<a class="reference internal" href="#xml.sax.SAXException" title="xml.sax.SAXException"><code class="xref py py-exc docutils literal"><span class="pre">SAXException</span></code></a>的子类。</span><span class="yiyi-st" id="yiyi-64">SAX应用程序和扩展可以使用此类用于类似的目的。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-65">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-66"><a class="reference external" href="http://www.saxproject.org/">SAX:XML的简单API</a></span></dt><dd><span class="yiyi-st" id="yiyi-67">这个网站是SAX API定义的焦点。</span><span class="yiyi-st" id="yiyi-68">它提供了一个Java实现和在线文档。</span><span class="yiyi-st" id="yiyi-69">也提供实现和历史信息的链接。</span></dd><dt><span class="yiyi-st" id="yiyi-70">模块<a class="reference internal" href="xml.sax.handler.html#module-xml.sax.handler" title="xml.sax.handler: Base classes for SAX event handlers."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax.handler</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-71">应用程序提供对象的接口定义。</span></dd><dt><span class="yiyi-st" id="yiyi-72">模块<a class="reference internal" href="xml.sax.utils.html#module-xml.sax.saxutils" title="xml.sax.saxutils: Convenience functions and classes for use with SAX."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax.saxutils</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-73">用于SAX应用程序的便利功能。</span></dd><dt><span class="yiyi-st" id="yiyi-74">模块<a class="reference internal" href="xml.sax.reader.html#module-xml.sax.xmlreader" title="xml.sax.xmlreader: Interface which SAX-compliant XML parsers must implement."><code class="xref py py-mod docutils literal"><span class="pre">xml.sax.xmlreader</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-75">解析器提供的对象的接口定义。</span></dd></dl></div><div class="section" id="saxexception-objects"><h2><span class="yiyi-st" id="yiyi-76">20.9.1. </span><span class="yiyi-st" id="yiyi-77">SAXException Objects</span></h2><p><span class="yiyi-st" id="yiyi-78"><a class="reference internal" href="#xml.sax.SAXException" title="xml.sax.SAXException"><code class="xref py py-class docutils literal"><span class="pre">SAXException</span></code></a>异常类支持以下方法:</span></p><dl class="method"><dt id="xml.sax.SAXException.getMessage"><span class="yiyi-st" id="yiyi-79"> <code class="descclassname">SAXException.</code><code class="descname">getMessage</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-80">返回描述错误条件的人工可读消息。</span></p></dd></dl><dl class="method"><dt id="xml.sax.SAXException.getException"><span class="yiyi-st" id="yiyi-81"> <code class="descclassname">SAXException.</code><code class="descname">getException</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-82">返回封装的异常对象,或<code class="docutils literal"><span class="pre">None</span></code>。</span></p></dd></dl></div></div></div> |