从字符串创建一个新节点及其子节点

Create a new node and its child nodes from a string

我试过函数 xmlNewDocNodexmlNewDocRawNode,但它们都 XML - 转义我们作为参数传递给它们的内容字符串。因此,显然他们都只能创建单个节点而不是子树。是否有允许我们创建子树的函数?例如,如果我们将字符串 <foo><bar>baz</bar></foo> 传递给函数,它将创建一个子树:

foo: xmlNode
`- bar: xmlNode
   `- baz: plaintext

而不是

foo: xmlNode
`- <bar>baz</bar>: plaintext

重新编辑: 可以将文本解析成一个临时文档节点,然后找到我们想要的节点并从文档中分离出来。这种从文本创建新节点的方式似乎有点矫枉过正。我想知道是否有一个 libxml2 函数可以为我们做这件事。

xmlParseBalancedChunkMemory。它的行为稍微更通用一些,因为它可以解析一系列节点。但这很容易检查,如以下 C 示例所示:

#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
int
main(int argc, char **argv)
{
    xmlDoc *doc = NULL;
    xmlNodePtr nodes = NULL;
    xmlChar *string = "<foo><bar>baz</bar></foo><blah/>";
    int stat = xmlParseBalancedChunkMemory(NULL, NULL, NULL, 0, string, &nodes );
    printf("stat:%d\n", stat);
    if (stat == 0) {
        printf("first:%s\n", nodes->name);
        printf("first-child:%s\n", nodes->children->name);
        printf("next:%s\n", nodes->next->name);
    }
    if (nodes != NULL) xmlFreeNodeList(nodes);
}

输出:

stat:0
first:foo
first-child:bar
next:blah