如何判断我在xml对象中的位置

时间:2012-09-20 08:46:33

标签: php xml sax

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

我无法理解如何在xml对象中告诉我使用sax的位置。例如,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设置的函数,我可以得到地址。

我的问题在于知道我是否在读家 - &gt;地址或经纪 - &gt;地址。

此xml文件中有多个字段共享相同的标记名称,并在不同的父标记下使用多次(firstName,lastName,phone,email等作为listingAgent,propertyContact等下的子项)。 / p>

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

1 个答案:

答案 0 :(得分: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.
    }
}