2011-11-22 42 views
3

給定一個有效的,任意的xmlNodePtr,我希望該節點的字符串表示,包括標記,屬性和子表單(遞歸)。libxml xmlNodePtr爲raw xml字符串?

FWIW,我的場景是我使用PerformXPathQuery從現有文檔中獲取數據塊。我需要將嵌入了XML元素的查詢結果作爲原始字符串,以便將其插入到文本字段中。

這些看起來像一個簡單的任務,但我找不到一個簡單的方法。將xmlDocPtr寫入文件必須執行此操作,但是,我看不到一個方便的方法,它將對樹中的任意節點執行相同的操作,並將其返回到內存中。

我希望我只想盲目從棕色的棕色文件的配色方案在xmlsoft.org你可以做到這一點絕對

回答

6

xmlNodeDump(或xmlNodeDumpOutput)您在找什麼?

+0

完美,謝謝。不知道我是如何錯過它的。 – Stickley

+0

正在尋找這個相當長的一段時間,不能得到它的工作。我返回的大小是'-1',緩衝區是'NULL'。僅供任何人作爲信息:初始化您的緩衝區!互聯網上的一些例子是不正確的,文件在這一點上也不是很詳細。使用'xmlBufferPtr buffer = xmlBufferCreate();'。 – lindinax

1

一種方法是創建一個新的文件,然後使用xmlDocCopyNode複製節點並將其序列化。

+0

謝謝你的想法。包括領先的標籤肯定是次優的。不過,我用下面的方法試了一下,複製出來了:'\t 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); } ' – Stickley

+0

對不起,我不明白你是否還有問題。如果你有什麼不清楚的話,你能否更新你的問題? – kan

4

我用我的代碼轉儲節點到一個字符串。這是objectiv-c,所以只需根據需要更改輸出即可。

xmlBufferPtr buffer = xmlBufferCreate(); 
int size = xmlNodeDump(buffer, myXMLDoc, myXMLNode, 0, 1); 

NSLog(@"%d", size); 
NSLog(@"%s", buffer->content); 

不要忘了再次釋放您的緩衝區。

相關問題