我目前正在使用C-結合與libxml2增加對晶琅C14N支持。我已經成功地使用xmlC14NDocSave將規範的xml保存到文件中。我遇到的問題是xmlOutputBufferPtr同時用於xmlC14NDocSaveTo和xmlC14NExecute。水晶郎C-結合結構似乎並沒有傳遞null值
我收到錯誤的是(Mac和Linux)
xmlC14NExecute:輸出緩衝區編碼器= NULL但C14N需要UTF8輸出
文檔狀態
此緩衝區必須有編碼器== NULL因爲C14N要求UTF-8輸出
在src/C14N/lib_C14N.cr
我有以下代碼
type CharEncodingHandler = Void*
type Buff = Void*
#type OutputBuffer = Void*
struct OutputBuffer
context : Void*
writecallback : OutputWriteCallback
closecallback : OutputCloseCallback
encoder : CharEncodingHandler
buffer : Buff
conv : Buff
written : Int32
error : Int32
end
....
fun xmlC14NDocSaveTo(doc : LibXML::Node*, nodes : LibXML::NodeSet*, mode : Mode, inclusive_ns_prefixes : UInt8**, with_comments : Int32, buf : OutputBuffer*) : Int32
fun xmlC14NExecute(doc : LibXML::Node*, is_visible_callback : IsVisibleCallback, user_data : Void*, mode : Mode, inclusive_ns_prefixes : UInt8**, with_comments : Int32, buf : OutputBuffer*) : Int32
在src/C14N.cr
output = XML::LibC14N::OutputBuffer.new
p output.encoder
XML::LibC14N.xmlC14NDocSaveTo(@xml, nil, @mode, nil, 0, out output)
在p的ouput.encoder是Pointer(Void).null
所以會出現的值是空的結果。
的c14n.c
功能只是空檢查在buf->編碼器結構
if (buf->encoder != NULL) {
xmlGenericError(xmlGenericErrorContext,
"xmlC14NExecute: output buffer encoder != NULL but C14N requires UTF8 output\n");
return (-1);
}
任何幫助,將不勝感激,代碼可以在我的帳戶github中找到。克隆並運行crystal spec
謝謝你的幫助。出於某種原因,在閱讀完文檔後,我認爲這只是pointerof的一個快捷方式。 – vonKingsley