gpt4 book ai didi

c - 将 xmlDoc 嵌套到现有 xmlTextWriter 中

转载 作者:行者123 更新时间:2023-11-30 16:25:12 24 4
gpt4 key购买 nike

我认为我错过了一些微不足道的东西,但我在这方面浪费了很多时间,所以它的解决方案可能对其他人也有用:

我正在 Linux 下使用 libxml2 2.9.8(纯 C,而不是 C++ 绑定(bind))。我有一个表示 XML 文件的外部(非 libxml)树结构,并且我正在尝试使用 libxml2 写入字符串表示形式。一切都很简单,并且可以很好地遍历它并使用 xmlTextWriter API 进行编写(它是一个具有简单属性的结构,例如

 typedef struct _simplifiedNode {
char *tag,
char *content,
struct _simplifiedNode *parent,
struct _simplifiedNodeList *children,
} simplifiedNode;

),除了在某个时刻我遇到一个可能包含 xml 文档的字符串表示形式的字符串节点。我可以使用 xmlReadMemory API 解析它,但随后我需要将它(而不是其转义字符串表示形式)嵌套到正在进行的编写器中,包括命名空间和属性。

我是否缺少一种简单的方法来递归地执行此操作,具有已解析的 doc/root 元素,而不需要内省(introspection)每个子元素?

例如

我正在使用 xmlTextWriter API 生成以下文档

<Title>
TitleValue
</Title>
<Date>
2018-11-26
</Date>
<Content>

非 libxml 树中的 Content 节点是一个叶节点,其标签 Content 包含类似

的字符串
char *content = "<SomeXmlComplexDocument ss:someattr=\"attrval\">Somecontent</SomeXmlComplexDocument>"

我想要实现的是,而不是拥有类似的东西

<Content>&lt;SomeXmlComplexDocument&gt; ... </Content>

使用xmlReadMemory解析并验证内容后,重新注入(inject)获取的文档

<Content>
<SomeXmlComplexDocument ss:someattr="attrval">Somecontent</SomeXmlComplexDocument>
</Content>

应保留命名空间和属性。

最佳答案

要序列化未转义的内部 XML 片段,您可以简单地使用 xmlTextWriterWriteRaw 。不过,这不会检查 XML 的格式是否良好。如果需要验证,则必须在某个时刻解析 XML 片段。根据内容模型,您可能必须使用 xmlParseBalancedChunkMemory 而不是 xmlReadMemory。还应该可以在写入结果文档后一次性对其进行解析,但您会丢失原始行号等信息。

关于c - 将 xmlDoc 嵌套到现有 xmlTextWriter 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53478422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com