轻量级SAX解析器/迭代器

v1.1.0 2016-04-24 11:08 UTC

This package is auto-updated.

Last update: 2024-08-31 00:25:47 UTC


README

Build Status Coverage Status Latest Stable Version License

已废弃

创建于2016年 - 现在已经相当老旧并且不再维护。

那时实现这个功能实际上很有趣。

stopsopa/sax

轻量级SAX解析器/迭代器

安装

遵循Packagist说明: Packagist

库的使用

文件模式

use Stopsopa\Sax\Lib\Sax;

$s = new Sax($path_to_file_witch_xml_or_html, array(
    'mode' => Sax::MODE_FILE
));
// or
$s = new Sax($path_to_file_witch_xml_or_html, Sax::MODE_FILE);

foreach ($s as $d) {
    if ($d['type'] === Sax::N_TAG) {
        // iterates through nodes of xml/html
    }
}

字符串模式

use Stopsopa\Sax\Lib\Sax;

$s = new Sax($xml_or_html_as_a_string, array(
    'mode' => Sax::MODE_STRING
));
// or
$s = new Sax($xml_or_html_as_a_string, Sax::MODE_STRING);

foreach ($s as $d) {
    if ($d['type'] === Sax::N_TAG) {
        // iterates through nodes of xml/html
    }
}

节点类型

可能的类型及其JSON表示

  • Sax::N_TAG

节点示例 (开启标签)

<note id="eid" class="red blue" data-at="one" data-at="two" data-at>

数据示例 (开启标签)

{
    "type": 2,
    "raw": "<note id=\"eid\" class=\"red blue\" data-at=\"one\" data-at=\"two\" data-at>",
    "data": {
        "type": "opening",
        "attr": {
            "id": "eid",
            "class": "red blue",
            "data-at": [
                "one",
                "two",
                null
            ]
        },
        "name": "note"
    },
    "offset": 0
}

节点示例 (关闭标签)

    </note>

数据示例 (关闭标签)

{
    "type": 2,
    "raw": "<\/note>",
    "data": {
        "type": "closing",
        "name": "note"
    },
    "offset": 0
} 

节点示例 (空标签)

<div data="empty" />

数据示例 (空标签)

{
    "type": 2,
    "raw": "<div data=\"empty\" \/>",
    "data": {
        "type": "empty",
        "attr": {
            "data": "empty"
        },
        "name": "div"
    },
    "offset": 0
}
  • Sax::N_DATA (XML/HTML节点之间的数据)

数据示例:

<div> 
value        
</div>

数据示例:

{
    "type": 3,
    "raw": "\r\nvalue\r\n",
    "offset": 5
}
  • Sax::N_CDATA

节点示例:

<![CDATA[test data]>]]>

数据示例:

{
    "type": 4,
    "raw": "<![CDATA[test data]>]]>",
    "data": "test data]>",
    "offset": 5
}  
  • Sax::N_COMMENT

数据示例:

<!-- comment -->

数据示例:

{
    "type": 5,
    "raw": "<!-- comment -->",
    "data": " comment ",
    "offset": 0
}
  • Sax::N_SPACES (XML/HTML节点之间的空格)

数据示例:

{
    "offset": 38, 
    "raw": "\\r\\n", 
    "type": 1
}    

迭代

foreach ($sax_instance as $d) {
    switch ($d['type']) {
        case Sax::N_TAG:
                // do something with decomposed tag
            break;
        case Sax::N_DATA:
                // do something with decomposed data between tag
            break;
        ... etc.
    }
}

附加选项

$s = new Sax($pathtofile, array(
    'encoding' => 'utf8',
    'chunk' => null, // default 1024
    'mode' => null // default Sax::MODE_FILE, can be also Sax::MODE_STRING
));

许可证

MIT许可证 (MIT)
版权所有 (c) 2016 Szymon Działowski
在此特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供的人以本许可书的条款和条件行事,前提是上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定用途和不侵犯版权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类索赔、损害或其他责任是基于合同、侵权或其他方式引起的,无论是在软件中还是在软件的使用或其他交易中。