/* * call-seq: * node.base_uri = "uri" * * Set this node's base URI. */ static VALUE rxml_node_base_uri_set(VALUE self, VALUE uri) { xmlNodePtr xnode; Check_Type(uri, T_STRING); xnode = rxml_get_xnode(self); if (xnode->doc == NULL) return (Qnil); xmlNodeSetBase(xnode, (xmlChar*) StringValuePtr(uri)); return (Qtrue); }
/* * call-seq: * node.base = "uri" * * Set this node's base URI. */ VALUE ruby_xml_node_base_set(VALUE self, VALUE uri) { xmlNodePtr xnode; Check_Type(uri, T_STRING); Data_Get_Struct(self, xmlNode, xnode); if (xnode->doc == NULL) return(Qnil); xmlNodeSetBase(xnode, (xmlChar*)StringValuePtr(uri)); return(Qtrue); }
TImpl(const Stroka& style, const Stroka& base = "") { InitError(); TxmlDocHolder sheetDoc(xmlParseMemory(~style, +style)); if (!!base) { xmlNodeSetBase(sheetDoc->children, (xmlChar*)base.c_str()); } if (!sheetDoc) ythrow yexception() << "cannot parse xml of xslt: " << ErrorMessage; Stylesheet.Reset(xsltParseStylesheetDoc(sheetDoc.Get())); if (!Stylesheet) ythrow yexception() << "cannot parse xslt: " << ErrorMessage; // sheetDoc - ownership transferred to Stylesheet sheetDoc.Release(); }
static void atom10_parse_feed_link (xmlNodePtr cur, feedParserCtxtPtr ctxt, struct atom10ParserState *state) { gchar *href; href = atom10_parse_link (cur, ctxt, state); if (href) { xmlChar *baseURL = xmlNodeGetBase (cur->doc, xmlDocGetRootElement (cur->doc)); subscription_set_homepage (ctxt->subscription, href); /* Set the default base to the feed's HTML URL if not set yet */ if (baseURL == NULL) xmlNodeSetBase (xmlDocGetRootElement (cur->doc), (xmlChar *)href); else xmlFree (baseURL); g_free (href); } }
void Node::SetBaseURL(const string &baseURL) { xmlNodeSetBase(_xml, baseURL.utf8()); }
gchar* xhtml_extract (xmlNodePtr xml, gint xhtmlMode, const gchar *defaultBase) { xmlBufferPtr buf; xmlChar *xml_base = NULL; gchar *result = NULL; xmlNs *ns; /* Create the new document and add the div tag*/ xmlDocPtr newDoc = xmlNewDoc (BAD_CAST "1.0" ); xmlNodePtr divNode = xmlNewNode (NULL, BAD_CAST "div"); xmlDocSetRootElement (newDoc, divNode); xmlNewNs (divNode, BAD_CAST "http://www.w3.org/1999/xhtml", NULL); /* Set the xml:base of the div tag */ xml_base = xmlNodeGetBase (xml->doc, xml); if (xml_base) { xmlNodeSetBase (divNode, xml_base ); xmlFree (xml_base); } else if (defaultBase) xmlNodeSetBase (divNode, BAD_CAST defaultBase); if (xhtmlMode == 0) { /* Read escaped HTML and convert to XHTML, placing in a div tag */ xmlDocPtr oldDoc; xmlNodePtr copiedNodes = NULL; xmlChar *escapedhtml; /* Parse the HTML into oldDoc*/ escapedhtml = xmlNodeListGetString (xml->doc, xml->xmlChildrenNode, 1); if (escapedhtml) { escapedhtml = BAD_CAST g_strstrip ((gchar*) escapedhtml); /* stripping whitespaces to make empty string detection easier */ if (*escapedhtml) { /* never process empty content, xmlDocCopy() doesn't like it... */ xmlNodePtr body; oldDoc = xhtml_parse ((gchar*) escapedhtml, strlen ((gchar*) escapedhtml)); body = xhtml_find_body (oldDoc); /* Copy namespace from original documents root node. This is ro determine additional namespaces for item content. For example to handle RSS 2.0 feeds as provided by LiveJournal: <rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'> <channel> ... <item> ... <description>... <span class='ljuser' lj:user='someone' style='white-space: nowrap;'><a href='http://community.livejournal.com/someone/profile'><img src='http://stat.livejournal.com/img/community.gif' alt='[info]' width='16' height='16' style='vertical-align: bottom; border: 0; padding-right: 2px;' /></a><a href='http://community.livejournal.com/someone/'><b>someone</b></a></span> ...</description> ... </item> ... </channel> Then we will want to extract <description> and need to honour the xmlns:lj definition... */ ns = (xmlDocGetRootElement (xml->doc))->nsDef; while (ns) { xmlNewNs (divNode, ns->href, ns->prefix); ns = ns->next; } if (body) { /* Copy in the html tags */ copiedNodes = xmlDocCopyNodeList (newDoc, body->xmlChildrenNode); // FIXME: is the above correct? Why only operate on the first child node? // It might be unproblematic because all content is wrapped in a <div>... xmlAddChildList (divNode, copiedNodes); } xmlFreeDoc (oldDoc); xmlFree (escapedhtml); } } } else if (xhtmlMode == 1 || xhtmlMode == 2) { /* Read multiple XHTML tags and embed in div tag */ xmlNodePtr copiedNodes = xmlDocCopyNodeList (newDoc, xml->xmlChildrenNode); xmlAddChildList (divNode, copiedNodes); } buf = xmlBufferCreate (); xmlNodeDump (buf, newDoc, xmlDocGetRootElement (newDoc), 0, 0 ); if (xmlBufferLength (buf) > 0) result = (gchar*) xmlCharStrdup ((gchar*) xmlBufferContent (buf)); xmlBufferFree (buf); xmlFreeDoc (newDoc); return result; }