【问题标题】:PHP DOM ManipulationPHP DOM 操作
【发布时间】:2011-11-04 15:01:29
【问题描述】:

我的数据库中有一个由用户创建的带有样式的模板。因为用户通常很愚蠢,而且我不希望他们干预 php 代码,所以我想在模板渲染之前将实际值插入到他们的样式中。它是动态值。

所以我有类似的东西

<p>Here is your value:</p>
<span id="value"></span>
<p>Enjoy it!</p>

值的占位符。这可能是最简单的方法。我不能/不想在这里使用 jQuery,但我想要类似的东西。

我见过 PHP 的 DOMDocument 类,它似乎可以解决问题,但有一个问题:$dom-&gt;saveHTML() 似乎总是保存整个 HTML 树。 $dom-&gt;saveHTML($element) 仅保存该元素,但我的模板中同时保存了多个。

有没有什么技巧可以让它们在没有 html 的情况下全部保存?

【问题讨论】:

  • 我不能说我理解这里的问题...介意你解释得更好吗?您是否需要保存多个元素之间没有 HTML?
  • 所以你只需要body标签/元素的内部HTML?
  • 我只需要模板的纯 HTML。
  • 听起来您正在尝试构建模板引擎。为什么不使用 smarty.net、twig-project.org、phptal.org 等之一?
  • 因为我只有两个带有特殊 id 的标签要替换,并且无法控制其他库。

标签: php html xml dom


【解决方案1】:

saveHTML() 保存元素本身及其所有子元素。

可以保存body节点来保存整个文档内容:

$body = $doc->getElementsByTagName('body')->item(0);
$html = $doc->saveHTML($body);

// and remove <body></body>
$html = substr($html, strlen('<body>'), -strlen('</body>'));

或者一个一个救下body的孩子:

$html = '';
foreach($body->childNodes as $node) {
    $html .= $doc->saveHTML($node);
}

【讨论】:

    【解决方案2】:

    你可以使用libxslt的XSLTProc

    $html = <<<HTML
    <p>Here is your value:</p>
    <span id='value'></span>
    <p>Enjoy it!</p>
    HTML;
    
    $xslt = <<<XSL
    <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
    
    <xsl:output encoding='UTF-8' method='html'/>
    
    <xsl:template match='/html/body/*'>
        <xsl:copy-of select='.'/>
    </xsl:template>
    
    </xsl:stylesheet>
    XSL;
    
    $htmldoc = new DOMDocument();
    $htmldoc->loadHTML($html);
    $xsltdoc = new DOMDocument();
    $xsltdoc->loadXML($xslt);
    
    $xsltproc = new XSLTProcessor();
    $xsltproc->importStylesheet($xsltdoc);
    print $xsltproc->transformToXML($htmldoc);
    

    输出:

    <p>Here is your value:</p>
    <span id='value'></span>
    <p>Enjoy it!</p>
    

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2011-09-12
      • 2017-02-21
      • 2010-10-24
      • 2022-11-23
      • 2011-02-19
      • 2011-01-23
      • 2017-09-04
      • 2012-02-03
      相关资源
      最近更新 更多