我需要使用DOMDocument来制作报表。由于页面会有所不同(3到30页之间),我想使用for-loop创建这些页面(数量由一个变量定义)。页面的生成工作正常。
作为第2步,我需要用内容填充这些页面。这些内容也将由DOMDocument来实现。由于我在for-loop中使用了"$page",我认为定义的节点值只被添加到最后的for-loop结果中是很自然的行为。
我加入了一个 "想要的结果",因为我知道我没有获得该结果的逻辑。
问题是,在填充后,是否可以将 "想要的结果 "添加到最后一个for循环结果中?
后填充是否可以只用DOMDocument来完成,或者我需要另一个工具,比如Xpath。
<?php
$totalPages = 3;
$xml = new DomDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
$html = $xml->createElement('html');
$xml->appendChild($html);
$wrapper = $xml->createElement('div');
$wrapper->setAttribute('class', 'wrapper');
$html->appendChild($wrapper);
for ($i=1; $i <= $totalPages ; $i++) {
$page = $xml->createElement('div');
$page->setAttribute('class', 'pages');
// $page->nodeValue = 'Content...'; // Kept as reference. Move to below populating.
$page->setAttribute(
'id',
'page-' . $i
);
$wrapper->appendChild($page);
}
// Populate pages with content.
$page->nodeValue = 'Content...';
$wrapper->appendChild($page);
// Save & print.
$xml->save("result.xml");
echo $xml->saveHTML();
结果
<?xml version="1.0" encoding="UTF-8"?>
<html>
<div class="wrapper">
<div class="pages" id="page-1"/>
<div class="pages" id="page-2"/>
<div class="pages" id="page-3">Content...</div>
</div>
</html>
想要的结果
<?xml version="1.0" encoding="UTF-8"?>
<html>
<div class="wrapper">
<div class="pages" id="page-1"/>Content page-1</div>
<div class="pages" id="page-2"/>Content page-2</div>
<div class="pages" id="page-3">Content page-3</div>
</div>
</html>
为了满足以后在DOMDocument中填充页面的需要,可以使用动态变量。这意味着你先创建所有的页面,由于它是循环的一部分,你可以构建任意多的页面。
每个页面都有一个变量名,例如(page_1, page_2等)可以让你选择你想填充的页面。因此,页面的填充可以在for-loop之外完成。
填充的来源可以是你选择的,例如DOMDocument,数组,从文件导入。
<?php
$totalPages = 3;
$xml = new DomDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
$html = $xml->createElement('html');
$xml->appendChild($html);
$wrapper = $xml->createElement('div');
$wrapper->setAttribute('class', 'wrapper');
$html->appendChild($wrapper);
for ($i=1; $i <= $totalPages ; $i++) {
${'page_'.$i} = $xml->createElement('div');
${'page_'.$i}->setAttribute('class', 'pages');
${'page_'.$i}->setAttribute(
'id',
'page-' . $i
);
$wrapper->appendChild(
${'page_'.$i}
);
}
// Populate pages with content.
$page_1->nodeValue = 'Content-page-1';
$wrapper->appendChild($page_1);
$page_2->nodeValue = 'Content-page-2';
$wrapper->appendChild($page_2);
$page_3->nodeValue = 'Content-page-3';
$wrapper->appendChild($page_3);
// Save & print.
$xml->save("result.xml");
echo $xml->saveHTML();
填充结果
<html>
<div class="wrapper">
<div class="pages" id="page-1">Content-page-1</div>
<div class="pages" id="page-2">Content-page-2</div>
<div class="pages" id="page-3">Content-page-3</div>
</div>
</html>