📜  PHP | xml_parser_create_ns()函数(1)

📅  最后修改于: 2023-12-03 14:45:19.684000             🧑  作者: Mango

PHP | xml_parser_create_ns()函数

简介

xml_parser_create_ns()函数用于创建一个新的XML解析器并返回它的句柄。此函数与xml_parser_create()相似,但可以指定命名空间前缀。

语法
resource xml_parser_create_ns([string $encoding [,string $namespaceSeparator]] )
参数说明
  • $encoding:可选参数,指定解析器使用的字符编码。默认为与HTML相同的ISO-8859-1编码。
  • $namespaceSeparator:可选参数,指定命名空间分隔符。默认为冒号“:”。
返回值

返回一个资源句柄,标识着一个新的XML解析器。

示例
$xml = <<<XML
<?xml version="1.0"?>
<books xmlns:ns1="http://example.com/ns1" xmlns:ns2="http://example.com/ns2">
    <book ns2:isbn="978-0130810816">
        <ns1:title>PHP and MySQL Web Development (3rd Edition)</ns1:title>
        <ns1:author>By Luke Welling, Laura Thomson</ns1:author>
    </book>
    <book ns2:isbn="978-0596006303">
        <ns1:title>Programming PHP</ns1:title>
        <ns1:author>By Kevin Tatroe, Peter MacIntyre, Rasmus Lerdorf</ns1:author>
    </book>
</books>
XML;

$parser = xml_parser_create_ns();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
xml_parse($parser, $xml);
xml_parser_free($parser);

function startElement($parser, $name, $attrs)
{
    echo "Start tag: $name\n";
    foreach ($attrs as $key => $value) {
        echo "    Attr '$key'='$value'\n";
    }
}

function endElement($parser, $name)
{
    echo "End tag: $name\n";
}

function characterData($parser, $data)
{
    echo "Character data: $data\n";
}

此示例将生成以下输出:

Start tag: BOOK
    Attr 'ns2:isbn'='978-0130810816'
Start tag: NS1:TITLE
Character data: PHP and MySQL Web Development (3rd Edition)
End tag: NS1:TITLE
Start tag: NS1:AUTHOR
Character data: By Luke Welling, Laura Thomson
End tag: NS1:AUTHOR
End tag: BOOK
Start tag: BOOK
    Attr 'ns2:isbn'='978-0596006303'
Start tag: NS1:TITLE
Character data: Programming PHP
End tag: NS1:TITLE
Start tag: NS1:AUTHOR
Character data: By Kevin Tatroe, Peter MacIntyre, Rasmus Lerdorf
End tag: NS1:AUTHOR
End tag: BOOK
注意事项
  • 在使用xml_parser_create_ns()函数时,必须在xml_set_element_handler()和xml_set_character_data_handler()设置的回调函数中使用命名空间前缀。

  • 当使用xml_parser_create_ns()函数创建XML解析器时,必须使用xml_parse()函数来解析XML。使用xml_parse_into_struct()函数不会处理命名空间。