1
0
mirror of https://github.com/php/doc-zh.git synced 2026-03-24 15:12:20 +01:00
Files
archived-doc-zh/reference/xml/functions/xml-parse.xml
2025-10-26 21:40:32 +08:00

139 lines
4.1 KiB
XML
Raw Permalink 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.
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: b47e4bea197126359815c5e43403c4b77a0aaaa7 Maintainer: HonestQiao Status: ready -->
<!-- CREDITS: mowangjuanzi, Luffy -->
<refentry xml:id="function.xml-parse" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>xml_parse</refname>
<refpurpose>开始解析 XML 文档</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>xml_parse</methodname>
<methodparam><type>XMLParser</type><parameter>parser</parameter></methodparam>
<methodparam><type>string</type><parameter>data</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>is_final</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<para>
<function>xml_parse</function> 解析 XML 文档。已配置事件的处理程序根据需要被无限次调用。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>parser</parameter></term>
<listitem>
<para>
指向将要使用的 XML 解析器的指针。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>data</parameter></term>
<listitem>
<para>
要解析的数据块。可以通过使用新数据多次调用 <function>xml_parse</function> 来分段解析文档,只要在解析最后一个数据时设置 <parameter>is_final</parameter> 参数且为 &true; 即可。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>is_final</parameter></term>
<listitem>
<para>
如果被设置为 &true;,则 <parameter>data</parameter> 为当前解析中最后一段数据。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
成功时返回 1失败时返回 0。
</para>
<para>
若解析失败,可以使用如下函数获取错误信息:<function>xml_get_error_code</function><function>xml_error_string</function><function>xml_get_current_line_number</function><function>xml_get_current_column_number</function>
<function>xml_get_current_byte_index</function>
</para>
<note>
<para>
<parameter>is_final</parameter> 参数设置为 &true;,一些错误(例如 entity 错误)将会在数据末尾报告。
</para>
</note>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
&xml.changelog.parser-param;
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example xml:id="xml_parse.example.chunked">
<title>分块解析大型 XML 文档</title>
<para>
此示例展示了如何以块的形式读取和解析大型 XML 文档,这样就不必将整个文档保存在内存中。为简洁起见,省略了错误处理。
</para>
<programlisting role="php">
<![CDATA[
<?php
$stream = fopen('examples/book-simple.xml', 'r');
$parser = xml_parser_create();
xml_set_element_handler(
$parser,
function($parser, $name, $attributes) { echo $name, PHP_EOL; },
function($parser, $name) { echo $name, PHP_EOL; }
);
while (($data = fread($stream, 16384))) {
xml_parse($parser, $data); // parse the current chunk
}
xml_parse($parser, '', true); // finalize parsing
fclose($stream);
]]>
</programlisting>
</example>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->