2010-05-04 69 views
4

我想查詢一個使用名稱空間的XML文檔。我沒有使用名稱空間的xpath成功,但沒有使用名稱空間的結果。這是我正在嘗試的一個基本例子。我稍微壓縮了一下,所以在我的示例中可能存在一些小問題,可能會降低我的實際問題。如何用PHP/XPath/DOM查詢名稱空間

示例XML:

<?xml version="1.0"?> 
<sf:page> 
    <sf:section> 
      <sf:layout> 
       <sf:p>My Content</sf:p> 
      </sf:layout> 
    </sf:section> 
</sf:page> 

示例PHP代碼:

<?php 
$path = "index.xml"; 

$content = file_get_contents($path); 

$dom = new DOMDocument($content); 

$xpath = new DOMXPath($dom); 
$xpath->registerNamespace('sf', "http://developer.apple.com/namespaces/sf"); 

$p = $xpath->query("//sf:p", $dom); 

我的結果是, 「p」 是 「的DOMNodeList對象()」,它的長度爲0。任何幫助將是讚賞。

+1

您的XML沒有命名空間聲明?缺少xmlns:sf =「http://developer.apple.com/namespaces/sf」? – 2010-05-04 12:13:34

+0

文森特,這只是試圖將我的代碼壓縮成樣本的結果。以下xml是原始XML的一部分: 也許我並不理解某些東西。 – Alsbury 2010-05-04 12:36:27

回答

1

DOMDocument構造函數不包含內容,但版本和編碼。 相反的:

$path = "index.xml"; 
$content = file_get_contents($path); 
$dom = new DOMDocument($content); 

試試這個:

$path = "index.xml"; 
$doc = new DOMDocument(); 
$doc->load($path); 
0

您必須在XML文件中定義命名空間:

<?xml version="1.0"?> 
<root xmlns:sf="http://developer.apple.com/namespaces/sf"> 
    <sf:page> 
     <sf:section> 
       <sf:layout> 
        <sf:p>My Content</sf:p> 
       </sf:layout> 
     </sf:section> 
    </sf:page> 
</root>