我從來沒有真正使用過DOM解析器,現在我有一個問題。如何使用PHP的DOM解析器從XML中提取節點屬性
我怎麼會去從這個標記提取的網址:
<files>
<file path="http://www.thesite.com/download/eysjkss.zip" title="File Name" />
</files>
我從來沒有真正使用過DOM解析器,現在我有一個問題。如何使用PHP的DOM解析器從XML中提取節點屬性
我怎麼會去從這個標記提取的網址:
<files>
<file path="http://www.thesite.com/download/eysjkss.zip" title="File Name" />
</files>
使用SimpleXML:
$xml = new SimpleXMLElement($xmlstr);
echo $xml->file['path']."\n";
輸出:
http://www.thesite.com/download/eysjkss.zip
你可以使用PHP簡單的HTML DOM解析器,這是一個php庫.http://simplehtmldom.sourceforge.net/
爲什麼在內置功能足夠完成此任務時引入第三方庫? – Phil 2010-10-22 02:40:49
這就像jquery,非常方便 – Sam 2010-10-22 02:44:23
建議第三方替代[SimpleHtmlDom](http://simplehtmldom.sourceforge.net/),實際使用[DOM](http://php.net/manual/en/book。 dom.php)而不是字符串分析:[phpQuery](http://code.google.com/p/phpquery/),[Zend_Dom](http://framework.zend.com/manual/en/zend.dom .html),[QueryPath](http://querypath.org/)和[FluentDom](http://www.fluentdom.org)。 – Gordon 2010-10-22 10:32:50
要與DOM做到這一點,你做
$dom = new DOMDocument;
$dom->load('file.xml');
foreach($dom->getElementsByTagName('file') as $file) {
echo $file->getAttribute('path');
}
您還可以使用XPath做到這一點:
$dom = new DOMDocument;
$dom->load('file.xml');
$xPath = new DOMXPath($dom);
foreach($xPath->evaluate('/files/file/@path') as $path) {
echo $path->nodeValue;
}
或字符串值直接:
$dom = new DOMDocument;
$dom->load('file.xml');
$xPath = new DOMXPath($dom);
echo $xPath->evaluate('string(/files/file/@path)');
您可以獲取個人節點也可以通過手動遍歷DOM來運行
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->load('file.xml');
echo $dom->documentElement->firstChild->getAttribute('path');
標記此CW,因爲這已被多次(只是與不同的元素),包括我回答,但我懶得找到重複。
只要小心。 $ xml-> file ['path']的值不是一個字符串。它是SimpleXMLElement的一個實例。 – mellowsoon 2010-10-22 02:28:23
確實。它可能會導致問題時,將值與另一個字符串進行比較,但您可以預先將此值轉換爲字符串'(字符串)$ xml->文件['路徑']' – 2010-10-22 02:40:16
感謝球員,正是我正在尋找 – 2010-10-22 02:49:09