2014-04-06 68 views
0

我在加載我的XML文檔時遇到了問題。 XML文件是PHP DOMDocument沒有返回或加載第一個元素

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE gallery [ 
<!ELEMENT gallery (category*)> 
<!ELEMENT category (image*)> 
<!ELEMENT image (title,comment,password,owner,rating)> 
<!ELEMENT title ANY> 
<!ELEMENT comment ANY> 
<!ELEMENT password ANY> 
<!ELEMENT owner ANY> 
<!ELEMENT rating ANY> 
<!ATTLIST category name CDATA #REQUIRED> 
<!ATTLIST image date CDATA #REQUIRED> 
]> 
<gallery> 
    <category name="entertainment"> 
     <image date="monday"> 
      <title>1</title> 
      <comment>2</comment> 
      <password>3</password> 
      <owner>4</owner> 
      <rating>5</rating> 
     </image> 
     <image date="friday"> 
      <title>11</title> 
      <comment>22</comment> 
      <password>33</password> 
      <owner>44</owner> 
      <rating>55</rating> 
     </image> 
    </category> 
    <category name="education"> 
    </category> 
    <category name="relax"> 
    </category> 
    <category name="sporting"> 
    </category> 
</gallery> 

而我的PHP打印此XML

$doc = new DOMDocument(); 
    $doc->validateOnParse = true; 
    $doc->load(ROOT_PATH."xml/data.xml"); 

    if($doc->validate()) { 
     print_r($doc->saveHTML()); 

    } 
    else echo 'Not Validated ';  

,其結果是

2 3 4 5 22 33 44 55 

順便說一句,我不明白爲什麼第一個元素是跳過。我有問題,這樣的

$category = $doc->getElementById('entertainment'); 

if (!$category){ 
    echo 'not found'; 
} 

返回選擇元素:

not found 
+0

你是在瀏覽器中做這個嗎?查看瀏覽器的_page source_查看XML結構。如果您剛剛看到'2 3 5 22 33 44 55',可能是因爲瀏覽器正在將XML解釋爲HTML標記。你有什麼工作將XML轉儲回屏幕:http://ideone.com/WtzeKM –

+0

而'娛樂'沒有找到,因爲沒有'ID ='娛樂'元素,儘管你有'名稱= entertainment''。 –

+0

感謝提示。但我的瀏覽器正確地在html中打印這個XML。女巫是1 2 3 4 5 11 22 33 44 55.而瀏覽器中的xml原始文件也是正確的。 – ianion

回答

0

這是沒有意義的使用saveHTML這個XML文檔上,因爲它並不代表HTML。 A <title>元素在HTML中具有語義含義,並且它是不會顯示在頁面上的元素,所以這可能是您無法看到1和11的原因。

我懷疑你失敗選擇娛樂類別,因爲您的DTD並不指示名稱屬性代表ID的任何地方。你需要在你的DTD裏有這樣的東西:

<!ATTLIST category name ID #REQUIRED> 
+0

謝謝你,我救了我的頭像:)是的標題沒有打印,因爲特殊的含義。我已將此元素更改爲另一個名稱,現在可以使用。像你這樣的宣言也是對的。我現在可以通過ID選擇。再次感謝。 – ianion

相關問題