【问题标题】:libxml xmlNodePtr to raw xml string?libxml xmlNodePtr 到原始 xml 字符串?
【发布时间】:2012-01-04 03:34:47
【问题描述】:

给定一个有效的任意 xmlNodePtr,我想要该节点的字符串表示形式,包括相同形式(递归)的标记、属性和子节点。

FWIW,我的场景是我使用 PerformXPathQuery 从现有文档中获取数据块。我需要获取其中包含嵌套 XML 元素的查询结果作为原始字符串,以便将其插入到文本字段中。

这些似乎是一项简单的任务,但我找不到简单的方法。将 xmlDocPtr 写入文件必须这样做,但是,我看不到一个方便的方法可以对树中的任意节点执行相同的操作,并将其返回到内存中。

我希望我只是被 xmlsoft.org 上的 brown-on-brown 文档配色方案弄瞎了

【问题讨论】:

    标签: c libxml2


    【解决方案1】:

    您绝对可以这样做的一种方法是创建一个新文档,然后使用xmlDocCopyNode 将节点复制到其中并序列化它。

    【讨论】:

    • 感谢您的想法。包含前导 标记绝对不是最佳选择。但是我尝试了以下内容,但副本为空:<code> for (NSInteger i = 0; i < nodes->nodeNr; i++) { xmlDocPtr partialDoc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); xmlChar *mem; int len; xmlNodePtr copyNode = xmlDocCopyNode( nodes->nodeTab[i], partialDoc, 1 ); xmlAddChild( xmlDocGetRootElement( partialDoc ), copyNode ); xmlDocDumpMemory( partialDoc, &mem, &len ); NSLog( @"%s", mem ); } </code>
    • 对不起,我不明白你是否还有问题。如果您目前有不清楚的地方,能否更新您的问题?
    【解决方案2】:

    您要查找的是xmlNodeDump(或xmlNodeDumpOutput)吗?

    【讨论】:

    • 一直在寻找这个,但无法让它工作。我返回的大小是-1,我的缓冲区是NULL。仅供任何人参考:初始化缓冲区!互联网上的一些例子是不正确的,在这一点上文档也不是很详细。使用xmlBufferPtr buffer = xmlBufferCreate();
    【解决方案3】:

    我用来将节点转储到字符串的代码。它是objectiv-c,所以只需根据需要更改您的输出即可。

    xmlBufferPtr buffer = xmlBufferCreate();
    int size = xmlNodeDump(buffer, myXMLDoc, myXMLNode, 0, 1);
    
    NSLog(@"%d", size);
    NSLog(@"%s", buffer->content);
    

    不要忘记再次释放缓冲区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多