// Parse SAML xml to Xp object with doc and xpath with relevant namespaces registered func NewXp(xml []byte) *Xp { x := new(Xp) if len(xml) == 0 { x.doc = C.xmlNewDoc((*C.xmlChar)(unsafe.Pointer(C.CString("1.0")))) } else { x.doc = C.xmlParseMemory((*C.char)(unsafe.Pointer(&xml[0])), C.int(len(xml))) } x.xpathCtx = C.xmlXPathNewContext(x.doc) runtime.SetFinalizer(x, (*Xp).free) for _, ns := range namespaces { C.xmlXPathRegisterNs(x.xpathCtx, ns.prefix, ns.ns_uri) } return x }
// xmlParseMemory func ParseMemory(buffer []byte) *Document { doc := C.xmlParseMemory((*C.char)(unsafe.Pointer(&buffer[0])), C.int(len(buffer))) return makeDoc(doc) }