将 JSON 输入中的 HTML 字符串转换为 XML 节点

问题描述 投票:0回答:1

借助

json:parse
函数,我正在尝试使用 BaseX 10.7 解析 json 文件。

我的文件显示一些带有 html 字符的值,例如“文本”值中的这样:

   "order": 2,
   "page_id": 27,
   "text": "<p><strong>Présentation générale</strong></p>\r\n<p>L’ambon également nommé <em>pulpitium</em> (estrade) est une sorte de tribune élevée d’où sont proclamés les textes saints. Il est placé dans le chœur de l’église, généralement, du côté gauche.</p>\r\n<p>Dès la fin du IV<sup>e</sup> siècle, ce type de tribune, appelé <em>analogium</em>...<em>Bernard Berthod</em></h4>"

但是在我尝试解析我的文件之前,当我在 BaseX 中打开它时,我可以在输出窗口中看到一些字符(例如:

<
)已被其编码符号替换(变成
&lt;
)。

<order type="number">2</order><page__id type="number">27</page__id><text>&lt;p&gt;&lt;strong&gt;Présentation générale&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;L’ambon également nommé &lt;em&gt;pulpitium&lt;/em&gt; (estrade) est une sorte de tribune élevée d’où sont proclamés les textes saints. Il est placé dans le chœur de l’église, généralement, du côté gauche.&lt;/p&gt;&#xD;..>

我想我必须告诉 BaseX 接受 html 字符?

我尝试使用解析器选项(json 和 html),但没有任何改变......

html json parsing xquery basex
1个回答
0
投票

当您使用

json:parse
时,JSON 结构中的字符串...

{ "content": "<p>123</p>" }

…将被采用为转换后的 XML 中的字符串值:

<json type="object">
  <content>&lt;p&gt;123&lt;/p&gt;</content>
</json>

返回的 XML 文档字符串表示形式包含

&lt;
&gt;
的原因是字符
<
>
作为“实体引用”返回。否则,带有
<
/
>
的字符串和元素将无法再区分。

(我假设)您想要的是将 JSON 中的 XML 字符串转换为 XML:

<json type="object">
  <content><p>123</p></content>
</json>

这可以通过对生成的 XML 文档执行更新来完成:

content
元素的字符串值将替换为解析后的 XML 结构:

let $xml := json:parse('{ "content": "<p>123</p>" }')
return $xml update {
  for $text in json/content/text()
  return replace node $text with parse-xml-fragment($text)
}

请注意,这要求字符串是格式良好的 XML(您在问题中提供的代码片段并非如此)。

© www.soinside.com 2019 - 2024. All rights reserved.