This [[Module Library|XQuery Module]] provides functions for converting HTML to XML. Conversion will only take place if [http://home.ccil.org/~cowan/XML/tagsoup/ TagSoup] is included in the classpath (see [[Parsers#HTML Parser|HTML Parsing]] for more details).
=Conventions=
All functions and errors in this module are assigned to the <code><nowiki>http://basex.org/modules/html</nowiki></code> namespace, which is statically bound to the {{Code|html}} prefix.<br/>All errors are assigned to the <code><nowiki>http://basex.org/errors</nowiki></code> namespace, which is statically bound to the {{Code|bxerr}} prefix.
=Functions=
==html:parserdoc==
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Code|'''<pre>html:parser'''doc() $href as xs:string?, $options as map(*)? := map { }}) as document-node()?<br /pre>|-valign="top"
| '''Summary'''
|Returns Fetches the name of HTML document referred to by the applied HTML parser (currently: given {{Code|$href}}, converts it to XML and returns a document node. The {{Code|TagSoup$options}})argument can be used to set [[Parsers#Options|TagSoup Options]]. If an |- valign="top"| ''empty string'Errors' is returned, TagSoup was not found in the classpath, and ''|{{Error|parse|#Errors}} the input will cannot be treated as well-formed converted to XML.<br />
|}
==html:parse==
{| width='100%'
|-valign="top"| width='120' | '''SignaturesSignature'''|{{Func|html:parse|$input as xs:anyAtomicType|document-node()}}<br /pre>{{Func|html:parse|( $input value as xs:anyAtomicType, $options as itemmap(*)? := map { })|as document-node()}}<br /pre>|-valign="top"
| '''Summary'''
|Converts the HTML document specified by {{Code|$inputvalue}} to XML, and returns a document node:<br/>* The input may either be a of type {{Code|xs:string or a binary item (}}, {{Code|xs:hexBinarybase64Binary}}, or {{Code|xs:base64Binary)hexBinary}}.* If the input is passed on in its binary representation, and if no encoding option is supplied, the HTML parser will try to automatically choose the correct encodingautomatically.
The {{Code|$options}} argument can be used to set [[Parsers#TagSoup Options|TagSoup Options]], which can be specified…<br />.* as children of an {{Code|<html:options/>}} element; e.g.:<pre class="brush:xml"><html:options> <html:key1 value='value1'/> ...</html:options></pre>* as map, which contains all key/value pairs:<pre class- valign="brush:xml">map { "key1": "value1top", ... }</pre>|-
| '''Errors'''
|{{Error|BXHL0001parse|#Errors}} the input cannot be converted to XML.|} ==html:parser== {| width='100%'|- valign="top"| width='120' | '''Signature'''|{{Code|'''html:parser'''() as xs:string}}<br/>|- valign="top"| '''Summary'''|Returns the name of the applied HTML parser (currently: {{Code|TagSoup}}). If an ''empty string'' is returned, TagSoup was not found in the classpath, and the input will be treated as well-formed XML.<br/>
|}
;Query:
<pre classlang="brush:'xquery"'>
html:parse("<html>")
</pre>
;Result:
<pre classlang="brush:xml">
<html xmlns="http://www.w3.org/1999/xhtml"/>
</pre>
===Specifying Options===
The next query creates an XML document without with namespaces:
;Query:
<pre classlang="brush:'xquery"'>html:parse("<a href='ok.html'/>", map { 'nons': truefalse() })
</pre>
;Result:
<pre classlang="brush:xml"><htmlxmlns="http://www.w3.org/1999/xhtml">
<body>
<a shape="rect" href="ok.html"/>
;Query:
<pre classlang="brush:'xquery"'>html:parse(fetch:binary("httphttps://en.wikipedia.org"))
</pre>
;Result:
<pre classlang="brush:xml">
<html xmlns="http://www.w3.org/1999/xhtml" class="client-nojs" dir="ltr" lang="en">
<head>
! width="110"|Code
|Description
|-valign="top"|{{Code|BXHL0001parse}}
|The input cannot be converted to XML.
|}
=Changelog=
;Version 9.4
* Added: {{Function||html:doc}}
;Version 9.0
* Updated: error codes updated; errors now use the module namespace
The module was introduced with Version 7.6.
[[Category:XQuery]]