2010-12-28 17 views
1

XHTML文書の接頭辞付き名前空間要素を認識するためにPHPのSimpleXMLクラスを取得できないようです。ここに私の例です:SimpleXMLが名前空間要素を見つけられない

test.htmlという

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:zuq="http://localhost/zuq"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
    <h1>Heading</h1> 
    <p>Paragraph</p> 
    <zuq:region name="myRegion"> 
     <div class="myClass"> 
      <h1><zuq:data name="myDataHeading" /></h1> 
      <p><zuq:data name="myDataParagraph" /></p> 
     </div> 
    </zuq:region> 
</body> 
</html> 

私は次の操作を実行した場合:

$sxml = simplexml_load_file('test.html'); 
print_r($sxml); 

それを返します:

SimpleXMLElement Object 
(
    [head] => SimpleXMLElement Object 
     (
      [meta] => SimpleXMLElement Object 
       (
        [@attributes] => Array 
         (
          [http-equiv] => Content-Type 
          [content] => text/html; charset=utf-8 
         ) 

       ) 

      [title] => Untitled Document 
     ) 

    [body] => SimpleXMLElement Object 
     (
      [h1] => Heading 
      [p] => Paragraph 
     ) 

) 

しかし、私は次の操作を行います。

$sxml = simplexml_load_file('test.html'); 
$sxml_zuq = $sxml->children('zuq', true); 
print_r($sxml_zuq); 

それは空を返します。

SimpleXMLElement Object 
(
) 

動作するようには思えないforeachあるいは持つオブジェクトを反復し、children()も失敗にURIではなく、接頭辞を使用しました。

私は明らかにどこかで間違いを犯しましたが、私の試みは私が読んでいた多くのチュートリアルの例と全く同じです。

ここでは何が起こっていますか?

+0

のようにxpathを使用します。 'SimpleXMLElement :: getNamespaces()'を使用すると結果が得られますか? –

+0

はい私は** John Giotta **をしています。しかし、ジョシュが指摘したように、子供たちは直接の子孫でしかありません。 – Dan

答えて

2

children()は、子孫ではなくコンテキストノードの[直接]子のみを提供します。

$html = simplexml_load_file('test.html'); 

// get <body/>'s children 
$html->body->children('zuq', true); 

// use XPath to get all zuq:* nodes 
$html->xpath('//zuq:*'); 
+0

**ジョシュ・デイヴィス**今日の保存: – Dan

0

名前空間定義、のxmlns場合にだけ情報のために、:zuq =「のhttp:// localhost /をzuqが」代わりに、ルートノードの実際のXML要素で宣言された後、我々はさらにregisterXPathNamespace関数を呼び出す必要がありますhttp://www.dimuthu.org/blog/2008/09/30/xpath-in-simplexml/

関連する問題