Я думаю, что упускаю что-то тривиальное, но я теряю кучу времени на это, поэтому его решение может быть полезным и для других:
Я работаю с libxml2 2.9.8 (pureC, а не C ++ привязки) под LinuxУ меня есть внешняя (не libxml) древовидная структура, представляющая файл XML, и я пытаюсь записать в строковое представление, используя libxml2.Все это тривиально и хорошо работает, обходя его и записывая с помощью xmlTextWriter
API (это структура с простыми атрибутами, например
typedef struct _simplifiedNode {
char *tag,
char *content,
struct _simplifiedNode *parent,
struct _simplifiedNodeList *children,
} simplifiedNode;
), за исключением того, что в определенный момент я сталкиваюсь с строковым узлом, который может содержатьстроковое представление документа xml.Я могу разобрать его с помощью xmlReadMemory
API, но затем мне нужно вложить его (а не его экранированное строковое представление) в непрерывную запись, включая пространства имен и атрибуты.
Есть ли тривиальный способя не могу сделать это рекурсивно, имея проанализированный элемент doc / root, не анализируя каждый подэлемент?
например,
Я создаю следующий документ, используя xmlTextWriter
API
<Title>
TitleValue
</Title>
<Date>
2018-11-26
</Date>
<Content>
Узел Content в не-libxml дереве - это листовой узел с тегом Content
, содержащий строку типа
char *content = "<SomeXmlComplexDocument ss:someattr=\"attrval\">Somecontent</SomeXmlComplexDocument>"
То, чего я хочу достичь, вместо того, чтобы иметь что-то вроде
<Content><SomeXmlComplexDocument> ... </Content>
после анализа и проверки содержимого с помощью xmlReadMemory
для повторного внедрения документа с получением
<Content>
<SomeXmlComplexDocument ss:someattr="attrval">Somecontent</SomeXmlComplexDocument>
</Content>
пространств имен и атрибутов должны быть сохранены.