0

这可能是一个非常愚蠢的问题,但我会很感激任何帮助。我正在使用 libxml2 从 sql 数据库中的数据构建 XML 文件。所以我循环遍历 sql 表中的字段并执行以下操作:

xmlNewChild(node, NULL, (xmlChar*) template[i].c_str(), (xmlChar*) data[i].c_str());

生成 XML:

<template>data</template>

现在,对于其中的少数几个,我想偷偷摸摸地通过设置data[i]等于包含 XML 的字符串来放入另一个子节点。因此,例如,我想设置data[i]为,<subnode>text</subnode> 以便生成的 XML 为:

<template><subnode>text</subnode></template>

然而,在 XML 中,这些总是被渲染&lt;并且&gt;

<template>&lt;subnode&gt;text&lt;/subnode&gt;</template>

有没有办法保留尖括号?我认为使用xmlNewChild()而不是xmlNewTextChild()会保留字符,但显然不会。有没有办法将包含尖括号的字符串放入data[i]并将这些括号保留在构建的 XML 中?

(我意识到以这种方式偷偷添加额外的 xml 标签似乎是一种粗略的做法,但在我的情况下,它确实比找出许多字段中的哪些需要子节点然后以标准方式构建这些子节点要简单得多)。

4

2 回答 2

0

不,libxml2 将始终转义内容中的标签。我认为xmlNodeSetContentxmlNodeAddContent在这方面有所不同,但它们没有 - 它仅用于实体引用,例如&#169;. SetContent 会将其作为“真实”实体引用包含在内,但 AddContent 会将其转义为&amp;#169;.

于 2013-02-05T05:23:15.703 回答
0

不,你不能这样做。您需要先解析子节点,然后将其添加到父节点。

于 2013-02-05T01:51:27.633 回答