這可能與DOM。 DOMNode
提供了功能getLineNo()
。
DOM
$xml = <<<'XML'
<foo>
<bar/>
</foo>
XML;
$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
var_dump(
$xpath->evaluate('//bar[1]')->item(0)->getLineNo()
);
輸出:
int(2)
的SimpleXML
的SimpleXML是基於DOM,這樣你就可以SimpleXMLElement
對象轉換爲DOMElement
對象。
$element = new SimpleXMLElement($xml);
$node = dom_import_simplexml($element->bar);
var_dump($node->getLineNo());
是的,大多數情況下,如果您對SimpleXML有問題,答案就是使用DOM。
的XMLReader
XMLReader有一個行號內,但這裏是訪問他們沒有直接的方法。再次,您將不得不將其轉換爲DOMNode
。它的工作原理都是使用libxml2
。這會將節點及其所有後代讀入內存,因此請小心。
$reader = new XMLReader();
$reader->open('data://text/xml;base64,'.base64_encode($xml));
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT && $reader->name== 'bar') {
var_dump($reader->expand()->getLineNo());
}
}
來源
2015-04-07 09:13:48
ThW
爲什麼你需要行號?一個XML文件只能有一行,換行不是強制性的。您可以使用'foreach($ xml-> children()作爲$ entry => $ node)獲得條目號{' –
@MarkBaker我需要行號,因爲我正在分析xml文件並返回給用戶可能的問題的信息來解決它們。所以我需要說一些類似於:「這裏你在X行有錯誤」。我敢肯定,XML文件將是一個標準格式,將有足夠的線。感謝您的評論。 – Ismaestro
你是「保證人」是錯位的......沒有要求XML文件有換行符,它不必以任何方式進行美化,而且實際上它通常不被批准 –