0

我正在使用 PHP 中的 sax,因为我正在解析以更新数据库的 xml 文件大约为 150MB。

我无法理解如何判断我在使用 sax 的 xml 对象中的哪个位置。例如 xml 看起来像这样:

<listing>
    <home>
        <address>123 main st.</address>
    </home>
    <brokerage>
        <address>555 N. high st.</address>
    </brokerage>
</listing>

使用 sax,我知道列表标记何时开始,以及 home 标记,然后是地址标记等,但随后控制权被传递给我使用 xml_set_character_data_handler 设置的函数,我可以获得地址。

我的问题是知道我是在阅读家庭-> 地址还是经纪-> 地址。

这个xml文件中有多个字段共享同一个标签名,并且在不同的父标签下被多次使用(firstName、lastName、phone、email等作为listingAgent、propertyContact等下的子标签)。

我一直在谷歌搜索,但我发现的唯一 sax 示例显示了如何回显数据,而不是如何根据 xml 文件中的数据做出决策。是否有我不知道的函数,或者我必须编写自己的函数来确定孩子属于哪些父元素?

4

1 回答 1

1

您可以使用简单的堆栈检查您在 XML 文档中的位置,该堆栈存储打开的标签列表(伪代码):

$openedTags = array();

while ($node = /* read next XML node*/) {
    if ($node->isOpeningTag()) {
        array_push($openedTags, $node->getTagName());
        continue;
    }

    if ($node->isClosingTag()) {
        array_pop($openedTags);
        continue;
    }

    if ($node->isTextNode()) {
        print_r($openedTags);       // root ... listing, home, address
        echo $node->getTextValue(); // 123 main st.
    }
}
于 2012-09-20T08:53:30.787 回答