// xmlReadFile func ReadFile(filename string, encoding string, options ParserOption) *Document { ptrf := C.CString(filename) defer C.free_string(ptrf) ptre := C.CString(encoding) defer C.free_string(ptre) doc := C.xmlReadFile(ptrf, ptre, C.int(options)) return makeDoc(doc) }
// ReadFile loads an XmlDocument from a filename. The encoding declared in the document will be // used as the input encoding. If no encoding is declared, the library will use the alogrithm // in the XML standard to determine if the document is encoded with UTF-8 or UTF-16. func ReadFile(filename string, options ParseOption) (doc *XmlDocument, err error) { // verify the file exists and can be read before we invoke C API _, err = os.Stat(filename) if err != nil { return } dataBytes := GetCString([]byte(filename)) dataPtr := unsafe.Pointer(&dataBytes[0]) var docPtr *C.xmlDoc docPtr = C.xmlReadFile((*C.char)(dataPtr), nil, C.int(options)) if docPtr == nil { err = ERR_FAILED_TO_PARSE_XML } else { var encoding []byte // capture the detected input encoding p := docPtr.encoding if p != nil { encoding = []byte(C.GoString((*C.char)(unsafe.Pointer(p)))) } doc = NewDocument(unsafe.Pointer(docPtr), 0, encoding, DefaultEncodingBytes) } return }