【发布时间】:2013-06-07 10:13:02
【问题描述】:
这与PHP Dom Document有关。
我有如下示例文件
<?xml version="1.0" encoding="UTF-8"?>
<document>
<items>
<item class="pen">
<no>1</no>
<name>A</name>
<price>10</price>
</item>
<item class="book">
<no>2</no>
<name>B</name>
<price>20</price>
</item>
<item class="pen">
<no>2</no>
<name>C</name>
<price>30</price>
</item>
</items>
</document>
PHP 代码
$nodeCount = $oElement;
$limitCount = 1;
$nodeCount = $nodeCount->nextSibling;
while($nodeCount && !empty($nodeCount) && $nodeCount->nodeType == 1 && !preg_match("/pen/",$this->GetNodeClass($nodeCount)))
{
$limitCount++;
$nodeCount = $nodeCount->nextSibling;
}
这里,GetNodeClass() 检查属性 class,这是发生错误的罪魁祸首
function GetNodeClass($oElement)
{
//Error comes from below line when try to execute getAttribute() method on TextNode
$class = $oElement->getAttribute('class');
return $class;
}
当我遍历这些元素时,有时我会收到如下错误
致命错误:调用未定义的方法 DOMText::getAttribute() in
然后我尝试使用以下条件解决它以防止该错误。
$node->nodeType == 1
在某些情况下,它可以正常工作,但在某些情况下,它总是显示错误,如已说明的那样。我知道它的出现是因为节点之间有一些white space。但是在读取 XML 文件时还有其他方法可以忽略这些空白吗?因为我已经写了这么多代码,所以如果有一些精确的解决方案。
我使用 DomDocument 对象来完成这一切。
我们将不胜感激。
【问题讨论】:
-
您可以发布您当前使用的产生上述错误的代码吗?
-
@Prix,感谢您对问题中相关标签的快速响应和编辑。请找到有问题的附加代码。
-
@NullVoid 你有机会改成
$nodeList=$items->getElementsByTagName("item");吗? -
@NullVoid 你试过用
$xmldoc->preserveWhiteSpace = false; -
@Passerby,实际上我加载了整个文件并使用 DomDocument 获取后代元素,然后根据元素的层次结构使用
nextSibling或previousSibling遍历它们。所以我不能使用你提供的建议:(
标签: php xml-parsing domdocument