【问题标题】:PHP / HTML: Import HTML file into another one, while merging duplicatesPHP / HTML:将HTML文件导入另一个文件,同时合并重复项
【发布时间】:2017-12-10 15:32:49
【问题描述】:

首先,我知道有很多问题导致包括 HTML。

问题是,当我使用<?php include("1.html") ?> 将一个 HTML (1) 文件包含到另一个 (2) 文件中时,两个文件都包含如下内容:

<html>
    <body>
        <div id="specific div">
            <span id="span1">1</span>
        </div>
    </body>
</html>

在同一个特定 div 中有两个不同的跨度 - 一旦我将一个文件包含到另一个文件中,它将如下所示:

<html>
    <body>
        <div id="specific div">
            <span id="span1">1</span>
        </div>
        <div id="specific div">
            <span id="span2">2</span>
        </div>
    </body>
</html>

虽然我希望 specific div 的内容合并到其中之一,而不是最后必须使用相同的 id 进行 div:

<html>
    <body>
        <div id="specific div">
            <span id="span1">1</span>
            <span id="span2">2</span>
        </div>
    </body>
</html>

我如何做到这一点?


编辑:针对我的具体情况,我找到了一个不同且不太复杂的解决方案。因此,我现在无法真正选择正确的答案,所以如果得到足够的支持,我可能会选择一个。

【问题讨论】:

  • 这些包含实际上也有开始和结束 html 和正文标签吗?还是它们只是 html 片段(没有整页包装)?
  • 它们是带有 和 标签的全功能 HTML 文件,如上所示。您还应该注意, 和 标记都被合并而不是被复制。所以这几乎就是我希望在特定 div 上发生的事情......
  • 您可以使用 iframe 或将您的 html 文件转换为 php
  • 您确实应该发布您使用的解决方案。在 stackoverflow 上保留问题的目的是让其他人可以通过搜索找到解决方案。了解您使用的内容是有用的信息(将其发布为您自己对问题的回答)。
  • 我刚刚删除了导入文件中的特定div,并将span1放入需要的其他文件中。这不是解决上述问题的方法,只是针对我的具体情况......

标签: php html include


【解决方案1】:

您可以使用 php 的 DomDocument::loadHTMLFile() 函数。有了这个,你可以加载你的两个文件并按照你喜欢的方式合并它们。

如果你的文件看起来像你说的,像这样:

<html>
    <body>
        <div id="specific div1">
            <span id="span">bla bla bla</span>
        </div>
    </body>
</html>

您可以使用DomDocument:

$dom1 = new DomDocument();
$dom1->loadHTMLFile("file_1.html", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$dom2 = new DomDocument();
$dom2->loadHTMLFile("file_2.html", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$element = $dom2->getElementById("specific div2")->firstChild;
$dom1->getElementById("specific div1")->appendChild($element);

$merged_html = $dom1->saveHTML()

所以这会将div[id="specific div2"]的内容合并到div[id="specific div1"]

DOMDocument 也支持 xpath,如果您喜欢它而不是手动遍历节点或按 id 选择。

【讨论】:

  • 谢谢你的回答,但是问题已经不存在了。
【解决方案2】:

如果你想将一个 html 文件包含到另一个文件中,那么你可以使用 iframe 或者也可以将文件转换为 php 以使用 include。

如果你想在 index1.html 中包含 index2.html,那么你可以在 index1.html 中使用下面的 iframe 代码:

index1.html

<iframe src="index2.html"></iframe>

或者您可以将文件转换为 PHP,然后简单地将一个文件包含到另一个文件中,如下所示:

index1.php

<?php include('index2.php'); ?>

您也可以像下面这样使用 Server Side Include 将一个 html 包含到另一个中:

index1.html

<html>
<body>
    <!--#include virtual="/index2.html" -->
</body>
</html>

【讨论】:

  • 谢谢你的回答,但问题已经不存在了。
猜你喜欢
  • 2012-10-08
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2017-10-11
  • 2013-11-20
  • 1970-01-01
  • 2016-12-14
相关资源
最近更新 更多