【问题标题】:Create a new node and its child nodes from a string从字符串创建一个新节点及其子节点
【发布时间】:2021-12-31 06:01:30
【问题描述】:

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

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

而不是

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

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

【问题讨论】:

    标签: libxml2


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多