0

我正在用 PHP 构建一个网站,其中的内容存储在 XML 文件中。基本上我有一个index.php页面,它检查查询字符串并从 XML 提供适当的页面。

例如,输入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 来遍历标签,echo然后直接返回。

所以我正在使用该DOMDocument方法找到正确的<page>,它工作正常,除了内容作为 DOM 元素返回。expat 解析器需要一个字符串。所以我需要做两件事之一:

  1. 神奇地将 DOM 元素转换为保持所有标签完整的字符串,以便我可以在 expat 解析器中使用它。但是,如果我能做到这一点,我就不需要 expat 解析器,我可以直接回显转换后的字符串......

  2. 使用外籍人士以外的其他东西。

顺便说一句,我知道我可以将 XML 中的and 替换为 and <,但这使得代码很难阅读和编辑。如果可能的话,我想避免它。>&lt;&gt;

4

2 回答 2

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);

DOMDocument::saveXML() takes $node parameter to output only a specific node


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

于 2011-12-14T09:12:14.183 回答
0

哦。如果我在问这个问题之前再等几分钟就好了。

解决方案是将所有内容都包含在 CDATA 标记中,因此:

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

然后我可以抓取page标签并使用$page->nodeValue. 我提供这个是希望它可以帮助其他人避免我刚刚给自己带来的无意义的头痛。

于 2011-12-15T09:02:43.457 回答