【问题标题】:Create XML from HTML and add to existing XML table [duplicate]从 HTML 创建 XML 并添加到现有的 XML 表 [重复]
【发布时间】:2014-06-10 10:39:42
【问题描述】:

所以在 Drupal 中,我希望使用代码为每个节点创建一个 XML 表单。我已经使用以下代码成功创建了一个 XML 表...

$xml = new DOMDocument("1.0", "utf-8");
$root = $xml->createElement("article");
$xml->appendChild($root);
$front = $xml->createElement("front");
$root->appendChild($front);
$journal_meta = $xml->createElement("journal-meta");
$front->appendChild($journal_meta);
$journal_id = $xml->createTextNode($form['#node']->field_journal_id['und'][0]['value']);
$journal_meta->appendChild($journal_id);

$xml->formatOutput = true;
echo "<xmp>". $xml->saveXML() ."</xmp>";
$xml->save("mybooks.xml") or die("Error");

OUTPUT:
<?xml version="1.0" encoding="utf-8"?>
<article>
  <front>
    <journal-meta>en</journal-meta>
  </front>
</article>

现在我还想加载包含 HTML 的 body 字段并将其添加到上面的 XML 表输出中。我已经设法将 body 字段加载到 domDocument 中,然后专门针对 body 标签来创建节点列表。

我无法做的是遍历节点列表,以及我原来的 $xml 变量上的所有元素和 appendchilds。

$body = $form['#node']->body['und'][0]['value'];
$tidy = tidy_parse_string($body);
$body = $tidy->body();
$dom = new DomDocument();
$dom->loadHTML('<?xml encoding="UTF-8">' . $body);

print_r($dom->saveHTML());
$div = $dom->getElementsByTagName('body');

$dom 变量包含 domDocument,$div 变量包含 Nodelist,如何在不使用 Cdata 的情况下创建一个 XML 文档?

【问题讨论】:

  • 你能提供一个目标xml的例子吗?
  • 目的是从页面创建 XML 提要。如果您的意思是我尝试添加的正文示例,它基本上是任何 html。

    这是一些测试内容

    更多测试内容

  • 不是正文,而是您想要生成的完整、完整的 XML(至少包含 HTML)。 btw 我更喜欢 Atom 作为提要,有时使用我自己的命名空间扩展特定数据。
  • 请在提问前使用搜索。另外,请通过从头开始创建新示例来减少您的示例,仅使用尽可能少的代码突出一个孤立的问题。不要发布您的开发代码。尝试重现您自己的问题,这对找到解决方案(不仅仅是提出问题)很有帮助。

标签: php html xml xquery domdocument


【解决方案1】:

您可以使用 importNode、importXml 但这是可行的方法。形成您提供问题的代码,我看到您正在使用两个 DomDocuments。只使用一个,用于创建农场和 html。最后保存

$content = array(
    'article' => array(
        'front' => array(
            'journal-meta' => 'your-content-string'
        )
    )
);

$encoded = json_enocde($content);
$decoded =  json_decode($encoded); // associative array again

【讨论】:

  • 啊哈是的,完美几乎让我找到了我想要的东西。就在这之后,我如何才能将 $div 变量存储在实际的 XML 中。这被保存为节点列表,我需要从 XML 输出中去除 HTML 标记。
  • Aaaa,您实际上是要生成 html 页面,还是要以 xml 格式存储内容?也许你可以只使用 php striptags() 函数?
  • 稍后我将研究 striptags()。现在是的,我正在尝试以 XML 格式存储所有内容。我想定义初始代码中显示的第一批 XML,然后从 body 字段加载 HTML。在定义了一些元素和子节点之后……然后运行 ​​$xml->loadHTML,这会覆盖我所有的初始内容。然后我想到了上面的重新排列,但显然 XML 不能重新排列。所以基本上我想定义一些元素,然后在不覆盖我所有内容的情况下进行 loadHTML 调用。
  • 相信我,你不想使用 xml。只需创建一个关联数组并将其存储为 json 字符串。更快,不需要 Domdocument,不需要 xml 解析器。更短,更容易。我用一个例子更新了我的原始答案。
  • 要求是为每个书页创建一个 XML 提要,我是否仍然能够在存储在 JSON 字符串中的同时创建 XML 提要?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多