我正在使用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文件中的数据做出决策。是否有一个我不知道的函数,或者我是否必须编写自己的函数来确定一个子元素属于哪个父元素?
答案 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.
}
}