Difference between revisions of "HTML Module"

From BaseX Documentation
Jump to navigation Jump to search
m (Text replacement - "syntaxhighlight" to "pre")
 
(10 intermediate revisions by the same user not shown)
Line 7: Line 7:
 
=Functions=
 
=Functions=
  
==html:parser==
+
==html:doc==
  
 
{| width='100%'
 
{| width='100%'
|-
+
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Code|'''html:parser'''() as xs:string}}<br />
+
|<pre>html:doc(
|-
+
  $href    as xs:string?,
 +
  $options  as map(*)?    := map { }
 +
) as document-node()?</pre>
 +
|- valign="top"
 
| '''Summary'''
 
| '''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 />
+
|Fetches the HTML document referred to by the given {{Code|$href}}, converts it to XML and returns a document node. The {{Code|$options}} argument can be used to set [[Parsers#Options|TagSoup Options]].
 +
|- valign="top"
 +
| '''Errors'''
 +
|{{Error|parse|#Errors}} the input cannot be converted to XML.
 
|}
 
|}
  
Line 21: Line 27:
  
 
{| width='100%'
 
{| width='100%'
|-
+
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|html:parse|$input as xs:anyAtomicType|document-node()}}<br />{{Func|html:parse|$input as xs:anyAtomicType, $options as map(*)?|document-node()}}<br />
+
|<pre>html:parse(
|-
+
  $value    as xs:anyAtomicType,
 +
  $options as map(*)?           := map { }
 +
) as document-node()</pre>
 +
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
|Converts the HTML document specified by {{Code|$input}} to XML and returns a document node:<br/>
+
|Converts the HTML document specified by {{Code|$value}} to XML and returns a document node:<br/>
 
* The input may be of type {{Code|xs:string}}, {{Code|xs:base64Binary}}, or {{Code|xs:hexBinary}}.
 
* The input may be of type {{Code|xs:string}}, {{Code|xs:base64Binary}}, or {{Code|xs:hexBinary}}.
* If the input is passed on in its binary representation, the HTML parser will try to choose the correct encoding automatically.
+
* If the input is passed on in its binary representation, and if no encoding option is supplied, the HTML parser will try to choose the correct encoding automatically.
  
 
The {{Code|$options}} argument can be used to set [[Parsers#Options|TagSoup Options]].
 
The {{Code|$options}} argument can be used to set [[Parsers#Options|TagSoup Options]].
|-
+
|- valign="top"
 
| '''Errors'''
 
| '''Errors'''
 
|{{Error|parse|#Errors}} the input cannot be converted to XML.
 
|{{Error|parse|#Errors}} the input cannot be converted to XML.
 
|}
 
|}
  
==html:doc==
+
==html:parser==
  
 
{| width='100%'
 
{| width='100%'
|-
+
|- valign="top"
| width='120' | '''Signatures'''
+
| width='120' | '''Signature'''
|{{Func|html:doc|$uri as xs:string?|document-node()?}}<br />{{Func|html:doc|$uri as xs:string?, $options as map(*)?|document-node()?}}<br />
+
|{{Code|'''html:parser'''() as xs:string}}<br/>
|-
+
|- valign="top"
 
| '''Summary'''
 
| '''Summary'''
|Fetches the HTML document referred to by the given {{Code|$uri}}, converts it to XML and returns a document node. The {{Code|$options}} argument can be used to set [[Parsers#Options|TagSoup Options]].
+
|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/>
|-
 
| '''Errors'''
 
|{{Error|parse|#Errors}} the input cannot be converted to XML.
 
 
|}
 
|}
  
Line 57: Line 63:
  
 
;Query:
 
;Query:
<syntaxhighlight lang="xquery">
+
<pre lang='xquery'>
 
html:parse("<html>")
 
html:parse("<html>")
</syntaxhighlight>
+
</pre>
  
 
;Result:
 
;Result:
<syntaxhighlight lang="xml">
+
<pre lang="xml">
 
<html xmlns="http://www.w3.org/1999/xhtml"/>
 
<html xmlns="http://www.w3.org/1999/xhtml"/>
</syntaxhighlight>
+
</pre>
  
 
===Specifying Options===
 
===Specifying Options===
Line 71: Line 77:
  
 
;Query:
 
;Query:
<syntaxhighlight lang="xquery">
+
<pre lang='xquery'>
 
html:parse("<a href='ok.html'/>", map { 'nons': false() })
 
html:parse("<a href='ok.html'/>", map { 'nons': false() })
</syntaxhighlight>
+
</pre>
  
 
;Result:
 
;Result:
<syntaxhighlight lang="xml">
+
<pre lang="xml">
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
   <body>
 
   <body>
Line 82: Line 88:
 
   </body>
 
   </body>
 
</html>
 
</html>
</syntaxhighlight>
+
</pre>
  
 
===Parsing Binary Input===
 
===Parsing Binary Input===
Line 90: Line 96:
  
 
;Query:
 
;Query:
<syntaxhighlight lang="xquery">
+
<pre lang='xquery'>
 
html:parse(fetch:binary("https://en.wikipedia.org"))
 
html:parse(fetch:binary("https://en.wikipedia.org"))
</syntaxhighlight>
+
</pre>
  
 
;Result:
 
;Result:
<syntaxhighlight lang="xml">
+
<pre lang="xml">
 
<html xmlns="http://www.w3.org/1999/xhtml" class="client-nojs" dir="ltr" lang="en">
 
<html xmlns="http://www.w3.org/1999/xhtml" class="client-nojs" dir="ltr" lang="en">
 
   <head>
 
   <head>
Line 101: Line 107:
 
     <meta charset="UTF-8"/>
 
     <meta charset="UTF-8"/>
 
     ...
 
     ...
</syntaxhighlight>
+
</pre>
  
 
=Errors=
 
=Errors=
Line 108: Line 114:
 
! width="110"|Code
 
! width="110"|Code
 
|Description
 
|Description
|-
+
|- valign="top"
 
|{{Code|parse}}
 
|{{Code|parse}}
 
|The input cannot be converted to XML.
 
|The input cannot be converted to XML.

Latest revision as of 17:39, 1 December 2023

This XQuery Module provides functions for converting HTML to XML. Conversion will only take place if TagSoup is included in the classpath (see HTML Parsing for more details).

Conventions[edit]

All functions and errors in this module are assigned to the http://basex.org/modules/html namespace, which is statically bound to the html prefix.

Functions[edit]

html:doc[edit]

Signature
html:doc(
  $href     as xs:string?,
  $options  as map(*)?     := map { }
) as document-node()?
Summary Fetches the HTML document referred to by the given $href, converts it to XML and returns a document node. The $options argument can be used to set TagSoup Options.
Errors parse: the input cannot be converted to XML.

html:parse[edit]

Signature
html:parse(
  $value    as xs:anyAtomicType,
  $options  as map(*)?           := map { }
) as document-node()
Summary Converts the HTML document specified by $value to XML and returns a document node:
  • The input may be of type xs:string, xs:base64Binary, or xs:hexBinary.
  • If the input is passed on in its binary representation, and if no encoding option is supplied, the HTML parser will try to choose the correct encoding automatically.

The $options argument can be used to set TagSoup Options.

Errors parse: the input cannot be converted to XML.

html:parser[edit]

Signature html:parser() as xs:string
Summary Returns the name of the applied HTML parser (currently: TagSoup). If an empty string is returned, TagSoup was not found in the classpath, and the input will be treated as well-formed XML.

Examples[edit]

Basic Example[edit]

The following query converts the specified string to an XML document node.

Query
html:parse("<html>")
Result
<html xmlns="http://www.w3.org/1999/xhtml"/>

Specifying Options[edit]

The next query creates an XML document with namespaces:

Query
html:parse("<a href='ok.html'/>", map { 'nons': false() })
Result
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <a shape="rect" href="ok.html"/>
  </body>
</html>

Parsing Binary Input[edit]

If the input encoding is unknown, the data to be processed can be passed on in its binary representation. The HTML parser will automatically try to detect the correct encoding:

Query
html:parse(fetch:binary("https://en.wikipedia.org"))
Result
<html xmlns="http://www.w3.org/1999/xhtml" class="client-nojs" dir="ltr" lang="en">
  <head>
    <title>Wikipedia, the free encyclopedia</title>
    <meta charset="UTF-8"/>
    ...

Errors[edit]

Code Description
parse The input cannot be converted to XML.

Changelog[edit]

Version 9.4
Version 9.0
  • Updated: error codes updated; errors now use the module namespace

The module was introduced with Version 7.6.