PHP XML解析器函数

PHP xml_set_element_handler() 函数设置 XML 解析器的元素处理函数。 start_handlerend_handler 是包含 xml_parse() 时必须存在的函数名称的字符串 为解析器调用。

语法

xml_set_element_handler(parser, start_handler, end_handler) 

    参数

    parser必填。 指定对 XML 解析器的引用以设置开始和结束元素处理函数。
    start_handler必填。 指定一个字符串,其中包含要在元素开头调用的函数的名称。该函数必须具有三个参数:
    start_handler(parser, name, attribs) 
      • parser:第一个参数 parser 是调用处理程序的 XML 解析器的引用。
      • name:第二个参数 name 包含调用此处理程序的元素的名称。如果大小写折叠对此解析器有效,则元素名称将为大写字母。
      • attribs:第三个参数 attribs 包含一个具有元素属性的关联数组(如果有的话)。该数组的键是属性名称,值是属性值。属性名称按照与元素名称相同的标准进行大小写折叠。属性值不区分大小写。
      注意:除了函数名之外,还可以使用包含对象引用和方法名的数组。
      end_handler必填。 指定一个字符串,其中包含要在元素末尾调用的函数名称。该函数必须有两个参数:
      end_handler(parser, name) 
        • parser:第一个参数 parser 是调用处理程序的 XML 解析器的引用。
        • name:第一个参数 name 包含调用此处理程序的元素的名称。如果大小写折叠对此解析器有效,则元素名称将为大写字母。
        如果处理程序函数设置为空字符串或 false,则禁用相关处理程序。

        注意:在 XML 中,大小写折叠表示大写。默认情况下,传递给处理函数的所有元素名称和元素属性都是大小写折叠的。可以使用 xml_parser_get_option()xml_parser_set_option() 函数分别。

        返回值

        成功时返回 true,失败时返回 false。

        示例:xml_set_element_handler() 示例

        让我们假设我们有一个名为 test.xml 的文件。该文件包含以下内容:

        <?xml version="1.0" encoding="UTF-8"?>
        <userlist>
          <user>
            <username>John123</username>
            <name>John Smith</name>
            <phone>+1-8054098000</phone>
            <address>Brooklyn, New York, USA</address>
          </user>
        </userlist> 
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

        在下面的示例中,使用 xml_parser_create() 函数创建 XML 解析器。然后打开 XML 文件,使用字符处理函数和元素处理函数解析其数据。解析文档后,使用xml_parser_free()函数释放解析器。

        <?php
        //创建XML解析器
        $parser=xml_parser_create();
        
        //名为"start_handler"的元素处理函数
        //启用自定义输出
        function start_handler($parser, $element, $attribs) {     
          switch($element) {
            case "USERNAME":
              echo "<b>User Name : "; 
              break;
            case "NAME":
              echo "Name : ";         
              break;
            case "PHONE":
              echo "Phone : ";        
              break;
            case "ADDRESS":
              echo "Address : ";      
              break;
          }
        }
         
        //元素处理函数"end_handler"
        function end_handler($parser, $element) {
          if($element == "USERNAME") 
            echo "</b><br>";
          else
            echo "<br>";
        }
         
        // 设置元素处理程序
        xml_set_element_handler($parser, "start_handler", 
                                "end_handler");
        
        //XML解析器的字符处理函数
        function char_print($parser, $data) {
          echo $data;
        }
        
        //设置XML解析器的字符处理函数
        xml_set_character_data_handler($parser,"char_print");
        
        //打开xml文件
        $fp = fopen("test.xml", "r");
        
        while($data = fread($fp,4096)) {
          //解析XML数据
          xml_parse($parser,$data,feof($fp)) or
        
            //解析错误时显示错误
            die (sprintf("XML Error: %s at line %d",
        
            //错误字符串
            xml_error_string(xml_get_error_code($parser)),
        
            //当前行
            xml_get_current_line_number($parser)));
        }
        
        //免费的XML解析器
        xml_parser_free($parser);
        
        fclose($fp);
        ?> 
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49
        • 50
        • 51
        • 52
        • 53
        • 54
        • 55
        • 56
        • 57
        • 58
        • 59
        • 60
        • 61
        • 62
        • 63
        • 64

        上述代码的输出将是:

        User Name : John123
        Name : John Smith
        Phone : +1-8054098000
        Address : Brooklyn, New York, USA 
        • 1
        • 2
        • 3