【问题标题】:Retrieving the contents of XML tags from Postgres Database从 Postgres 数据库中检索 XML 标记的内容
【发布时间】:2017-11-27 18:42:49
【问题描述】:

我正在创建一个带有博客的网站。我将使用带有 PHP 的 Postgres 数据库。每个博客帖子都有多个页面。我想将每篇文章的所有页面保存在 XML 数据字段中。

需要明确的是,每个帖子在数据库表中都会有一行。每一行都会有几个字段,包括postID、date、htmlData等。

htmlData 列将是 XML 数据字段。不同页面的 html 数据将存储/表示在 htmlPage 标签中(见下文)。

现在,如何按原样提取/选择特定 htmlPage 标记的内容?

<htmlPage id="1">

  <div class="pageContainer">

    <div id="pageContents">

      <h1>Introduction</h1>

      <p>

        Text here. <img src="/images/silver.png" alt="silver">

      </p>

    </div>

  </div>

</htmlPage>


<htmlPage id="2">

  <div class="pageContainer">

    <div id="pageContents">

      <p>

        Text here. <img src="/images/gold.png" alt="gold">

      </p>

    </div>

  </div>

</htmlPage>

【问题讨论】:

  • 请发布您尝试过的内容(例如,您的代码),以达到预期的效果。 SO 是一个人们帮助您更好地了解正在发生的事情的网站,而不是人们为您编写代码的地方。

标签: php database postgresql xml-parsing


【解决方案1】:

鉴于此示例表(您需要更多地考虑您的实际表):

CREATE TABLE content.xmlexample
(
    content_id character varying,
    xml_content xml
)

以下是如何插入这些记录的示例。注意这里CDATA tag 的使用非常重要。将您的内容包含在 CDATA 中将防止某些字符破坏 XML 解析器:

INSERT INTO content.xmlexample (content_id, xml_content) VALUES ('1', '<?xml version="1.0" encoding="UTF-8"?>
<htmlpage><![CDATA[<htmlPage id="1">
  <div class="pageContainer">
    <div id="pageContents">
      <h1>Introduction</h1>
      <p>
        Text here. <img src="/images/silver.png" alt="silver">
      </p>
    </div>
  </div>]]></htmlpage>');

  INSERT INTO content.xmlexample (content_id, xml_content) VALUES ('2', '<?xml version="1.0" encoding="UTF-8"?>
<htmlpage><![CDATA[<htmlPage id="2">
  <div class="pageContainer">
    <div id="pageContents">
      <h1>Introduction</h1>
      <p>
        Text here. <img src="/images/gold.png" alt="gold">
      </p>
    </div>
  </div>]]></htmlpage>');

以下是选择数据的示例:

SELECT xml_content 
FROM content.xmlexample
WHERE content_id = '1';

SELECT xml_content 
FROM content.xmlexample
WHERE content_id = '2';

所有这一切的脚注:根据我的经验,在 XML 中嵌入 HTML 可能是个坏主意。我的回答中没有考虑到这一点。 Here is an article 解释了在您的标记中干扰逃逸标记的一些危险。

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多