2011-12-14 56 views
0

我建立一個網站在PHP文件的一部分。基本上我有一個index.php頁面,它檢查查詢字符串並從XML提供適當的頁面。解析僅在內容存儲在XML文件中有外籍人士在PHP

例如,輸入www.mysite.com/?page=home將導致PHP腳本來檢查XML文件的<page id="home">標籤粘貼無論是標籤內到index.php

<page>標籤的內容保存爲HTML,因此:

<xmlroot> 
    <page id="home"> 
    <h1>An HTML Header Tag!</h1> 
    <p>This is a paragraph</p> 
    </page> 
    [...etc] 
</xmlroot> 

我希望能夠抓住適當的<page>標籤並以某種方式解析的內容。我知道<page>標記中的所有內容都是有效的HTML,所以我只是想使用expat來運行標記並將它們直接退出。

所以我使用DOMDocument方法找到正確的<page>,它工作正常,但內容作爲DOM元素返回。 expat解析器需要一個字符串。所以,我需要做的兩件事情之一:

  1. 神奇的DOM元素轉換爲保持所有的標籤完好,所以我可以在Expat解析器使用的字符串。但是,如果我能做到這一點,我不會需要Expat解析器,我可以附和該轉換後的字符串直出....

  2. 比外籍其他使用的東西。

順便說一句,我知道我可以只更換與&lt;&gt; XML中<>,但是這使得代碼相當難以閱讀和編輯。如果可能,我想避免它。

+0

該死的,我只記得CDATA ...我會試試看。如果我設法做到這一點,我會更新它。 – 2011-12-14 08:56:26

+0

好的使用CDATA解決了它。我會發布完整的答案,以幫助其他遇到同樣問題的人。它將不得不等待,直到stackoverflow讓我,但是,這將在大約7個小時... :-) – 2011-12-14 09:05:23

回答

0
<?php 

$doc = new DOMDocument('1.0'); 

$root = $doc->createElement('html'); 
$root = $doc->appendChild($root); 

$head = $doc->createElement('head'); 
$head = $root->appendChild($head); 

$title = $doc->createElement('title'); 
$title = $head->appendChild($title); 

$text = $doc->createTextNode('< This is the title >'); 
$text = $title->appendChild($text); 

echo $head->ownerDocument->saveXML($head); 

DOM文檔:: saveXML()需要$節點參數僅輸出特定的節點


http://www.php.net/manual/en/domdocument.savexml.php

0

D'哦。如果在問這個問題之前我只等了幾分鐘。

的解決方案是隻包住一切CDATA標籤這樣的:

<xmlroot> 
    <page id="home"> 
    <![CDATA[ 
     <h1>An HTML Header Tag!</h1> 
     <p>This is a paragraph</p> 
    ]]> 
    </page> 
    [...etc] 
</xmlroot> 

然後我就可以用搶的$page->nodeValue標籤page和輸出內容。我提出這個想法是爲了讓別人省去我剛給自己的毫無意義的頭痛。