2011-09-15 140 views
1

我有一個解析XML文本的PHP頁面。該文本來自HTML文本字段中的用戶輸入。PHP DomDocument XML解析器

只要節點之間存在任何空白,Domdocument xml解析器就無法正確解析文檔。本質上它會識別第一個節點,但它不能找到任何嵌套節點。

刪除空格,它沒有問題。

$xmldoc = new DOMDocument(); 
$xmldoc->loadXML($rawxml); 

$top = $xmldoc->documentElement; 
if(!$top) {echo "error: xml config is empty"; exit(-1);} 
if($top->nodeName != "config") die("error: expect config tag as first element"); 


$nameNode = $top->childNodes->item(0); 

//Fails here 
if($nameNode->nodeName != "name") die("error: expect name tag following config tag"); 

作品

<config><name>sdf2</name></config> 

不工作

<config> <name>sdf2</name></config> 
+0

我dumb..coulda使用正則表達式..... $ rawxml = preg_replace函數( 「/> \ S +<」, $ rawxml); – user623879

+0

@ user623879這是錯誤的方法。閱讀http://stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php –

回答

0

這是正常現象。當您用DOM填充格式化的XML文檔時,縮進,換行符和節點值將默認作爲DOMText實例的一部分。您可以通過這樣做來禁用此功能

$xmldoc->preserveWhiteSpace = false; 

加載XML之前會丟棄任何格式化的空白。對於更詳細的答案看到