2010-10-22 16 views
5

'u kullanarak XML'den bir düğüm özniteliği nasıl çıkarılır Daha önce hiçbir zaman DOM ayrıştırıcısını kullanmadım ve şimdi bir sorum var.PHP'nin DOM Ayrıştırıcısı

<files> 
    <file path="http://www.thesite.com/download/eysjkss.zip" title="File Name" /> 
</files> 

cevap

12

SimpleXML Kullanımı:

Nasıl bu işaretlemenizdeki URL'yi çıkartır hakkında giderdim

$xml = new SimpleXMLElement($xmlstr); 
echo $xml->file['path']."\n"; 

Çıktı:

http://www.thesite.com/download/eysjkss.zip 
+4

Sadece dikkatli ol. $ Xml-> dosyasının ['yol'] değeri bir dizgedir. SimpleXMLElement'in bir örneğidir. – mellowsoon

+2

Gerçekten. Değer başka bir dizeyle karşılaştırılırken sorunlara neden olabilir, ancak bu değeri bir dizeye atabilirsiniz '(string) $ xml-> dosya ['yol']' –

+0

teşekkürler, tam olarak ne aradığımı –

-1

PHP Basit HTML DOM Ayrıştırıcı kullanabilirsiniz Bu bir php kütüphanesidir: http://simplehtmldom.sourceforge.net/

$dom = new DOMDocument; 
$dom->load('file.xml'); 
$xPath = new DOMXPath($dom); 
foreach($xPath->evaluate('/files/file/@path') as $path) { 
    echo $path->nodeValue; 
} 

Veya doğrudan bir dize değeri olarak

:

$dom = new DOMDocument; 
$dom->load('file.xml'); 
$xPath = new DOMXPath($dom); 
echo $xPath->evaluate('string(/files/file/@path)'); 

Tek tek getirebilir 0

+0

Yerleşik özellikler bu görev için yeterli olduğunda neden 3. taraf kitaplığı tanıtılmalı? – Phil

+0

Bu jquery gibidir, Çok uygun – Sam

+1

Aslında [DOM] (http://php.net/manual/en/book) kullanan [SimpleHtmlDom] (http://simplehtmldom.sourceforge.net/) için önerilen üçüncü taraf alternatifleri. dom.php) String Ayrıştırma yerine: [phpQuery] (http://code.google.com/p/phpquery/), [Zend_Dom] (http://framework.zend.com/manual/en/zend.dom .html), [QueryPath] (http://querypath.org/) ve [FluentDom] (http://www.fluentdom.org). – Gordon

10

sen de XPath ile yapabilir

$dom = new DOMDocument; 
$dom->load('file.xml'); 
foreach($dom->getElementsByTagName('file') as $file) { 
    echo $file->getAttribute('path'); 
} 

do DOM ile yapmak için düğümler ayrıca DOM'ı manuel olarak geçirerek

$dom = new DOMDocument; 
$dom->preserveWhiteSpace = FALSE; 
$dom->load('file.xml'); 
echo $dom->documentElement->firstChild->getAttribute('path'); 

Bu CW işaretleniyor, çünkü bu bana da dahil olmak üzere birden çok kez (yalnızca farklı öğelerle) yanıtlanıyordu, ancak yinelenen yeri bulmak için çok tembel davranıyorum.