2010-07-16 30 views
0

因此,我有一個XML文件(MS Word文件的XML導出)。什麼我只是試圖做的是更換這兩行:PHP DOM問題在XML中搜索<w:t>標籤

<w:t>Meno:</w:t> 

和:

<w:t>Priezvisko:</w:t> 

這是一個較長的XML摘錄:

<w:p w:rsidR="00CF175F" w:rsidRDefault="00CF175F"> 
− 
<w:r> 
<w:t>Meno:</w:t> 
</w:r> 
</w:p> 
− 
<w:p w:rsidR="00CF175F" w:rsidRDefault="00CF175F"> 
− 
<w:r> 
<w:t>Priezvisko:</w:t> 
</w:r> 
</w:p> 

我做它像這樣:

$xml = file_get_contents('file.xml'); 

$doc = new DOMDocument(); 
$doc->loadXML($xml); 
$doc->preserveWhiteSpace = false; 

$wts = $doc->getElementsByTagNameNS('http://schemas.openxmlformats.org/wordprocessingml/2006/main','t'); 

foreach ($wts as $wt) { 

echo 1; 

//if ('Meno:' === substr($wt->nodevalue, 0, 5)) { 
    //echo 1; 
//} 

} 

該腳本不回聲興。爲什麼getElementsByTagName不起作用? XML中有數十個w:t標籤。

+1

對不起,還沒有得到一個完整的答案的時候看到這個:。HTTP:/ /de2.php.net/manual/en/domelement.getelementsbytagnamens.php和這個:http://www.w3.org/TR/xml-names/ – Boldewyn 2010-07-16 12:34:56

+0

謝謝,我已經想通了Rob Levine。Check我的更新回答(問題與命名空間有關) – 2010-07-16 13:02:51

+0

(旁註)您可以使用'DOMDocument :: loadXMLFile'來加載DOM文件 – Gordon 2010-07-16 13:20:49

回答

1

我不知道PHP,但幾乎可以肯定的問題是,XML DOM認爲「W」指的是你尚未定義的名稱空間。您不需要搜索名爲「w:t」的「標籤」,而需要在「w」所指的名稱空間中搜索名爲「t」的標籤。

XML命名空間的一個更好的解釋,以及如何聲明它們(使用「的xmlns」你的文檔中,看到here

+0

謝謝,現在可以使用了。 – 2010-07-16 12:44:23