2011-12-14 46 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和输出内容。我提出这个想法是为了让别人省去我刚给自己的毫无意义的头痛。