{"route":"/en-US-v0.13.1/reference/data-loading/xml/","title":"XML","description":"Documentation for the `xml` function.","part":null,"outline":[{"id":"summary","name":"Summary","children":[]},{"id":"example","name":"Example","children":[]},{"id":"parameters","name":"Parameters","children":[{"id":"parameters-source","name":"source","children":[]}]},{"id":"definitions","name":"Definitions","children":[{"id":"definitions-decode","name":"Decode XML","children":[{"id":"definitions-decode-data","name":"data","children":[]}]}]}],"body":{"kind":"func","content":{"path":[],"name":"xml","title":"XML","keywords":[],"oneliner":"Reads structured data from an XML file.","element":false,"contextual":false,"deprecation":null,"details":"<p>Reads structured data from an XML file.</p>\n<p>The XML file is parsed into an array of dictionaries and strings. XML nodes\ncan be elements or strings. Elements are represented as dictionaries with\nthe following keys:</p>\n<ul>\n<li><code>tag</code>: The name of the element as a string.</li>\n<li><code>attrs</code>: A dictionary of the element's attributes as strings.</li>\n<li><code>children</code>: An array of the element's child nodes.</li>\n</ul>\n<p>The XML file in the example contains a root <code>news</code> tag with multiple\n<code>article</code> tags. Each article has a <code>title</code>, <code>author</code>, and <code>content</code> tag. The\n<code>content</code> tag contains one or more paragraphs, which are represented as <code>p</code>\ntags.</p>\n<h2 id=\"example\">Example</h2>\n<div class=\"previewed-code\"><pre><code><span class=\"typ-key\">#</span><span class=\"typ-key\">let</span> <span class=\"typ-func\">find-child</span><span class=\"typ-punct\">(</span>elem<span class=\"typ-punct\">,</span> tag<span class=\"typ-punct\">)</span> <span class=\"typ-op\">=</span> <span class=\"typ-punct\">{</span>\n  elem<span class=\"typ-punct\">.</span>children\n    <span class=\"typ-punct\">.</span><span class=\"typ-func\">find</span><span class=\"typ-punct\">(</span>e <span class=\"typ-op\">=&gt;</span> <span class=\"typ-str\">&quot;tag&quot;</span> <span class=\"typ-key\">in</span> e <span class=\"typ-key\">and</span> e<span class=\"typ-punct\">.</span>tag <span class=\"typ-op\">==</span> tag<span class=\"typ-punct\">)</span>\n<span class=\"typ-punct\">}</span>\n\n<span class=\"typ-key\">#</span><span class=\"typ-key\">let</span> <span class=\"typ-func\">article</span><span class=\"typ-punct\">(</span>elem<span class=\"typ-punct\">)</span> <span class=\"typ-op\">=</span> <span class=\"typ-punct\">{</span>\n  <span class=\"typ-key\">let</span> title <span class=\"typ-op\">=</span> <span class=\"typ-func\">find-child</span><span class=\"typ-punct\">(</span>elem<span class=\"typ-punct\">,</span> <span class=\"typ-str\">&quot;title&quot;</span><span class=\"typ-punct\">)</span>\n  <span class=\"typ-key\">let</span> author <span class=\"typ-op\">=</span> <span class=\"typ-func\">find-child</span><span class=\"typ-punct\">(</span>elem<span class=\"typ-punct\">,</span> <span class=\"typ-str\">&quot;author&quot;</span><span class=\"typ-punct\">)</span>\n  <span class=\"typ-key\">let</span> pars <span class=\"typ-op\">=</span> <span class=\"typ-func\">find-child</span><span class=\"typ-punct\">(</span>elem<span class=\"typ-punct\">,</span> <span class=\"typ-str\">&quot;content&quot;</span><span class=\"typ-punct\">)</span>\n\n  <span class=\"typ-punct\">[</span><span class=\"typ-heading\">= <span class=\"typ-pol\">#</span><span class=\"typ-pol\">title</span><span class=\"typ-punct\">.</span><span class=\"typ-pol\">children</span><span class=\"typ-punct\">.</span><span class=\"typ-func\">first</span><span class=\"typ-punct\">(</span><span class=\"typ-punct\">)</span></span><span class=\"typ-punct\">]</span>\n  <span class=\"typ-func\">text</span><span class=\"typ-punct\">(</span><span class=\"typ-num\">10pt</span><span class=\"typ-punct\">,</span> weight<span class=\"typ-punct\">:</span> <span class=\"typ-str\">&quot;medium&quot;</span><span class=\"typ-punct\">)</span><span class=\"typ-punct\">[</span>\n    Published by\n    <span class=\"typ-pol\">#</span><span class=\"typ-pol\">author</span><span class=\"typ-punct\">.</span><span class=\"typ-pol\">children</span><span class=\"typ-punct\">.</span><span class=\"typ-func\">first</span><span class=\"typ-punct\">(</span><span class=\"typ-punct\">)</span>\n  <span class=\"typ-punct\">]</span>\n\n  <span class=\"typ-key\">for</span> p <span class=\"typ-key\">in</span> pars<span class=\"typ-punct\">.</span>children <span class=\"typ-punct\">{</span>\n    <span class=\"typ-key\">if</span> <span class=\"typ-func\">type</span><span class=\"typ-punct\">(</span>p<span class=\"typ-punct\">)</span> <span class=\"typ-op\">==</span> dictionary <span class=\"typ-punct\">{</span>\n      <span class=\"typ-func\">parbreak</span><span class=\"typ-punct\">(</span><span class=\"typ-punct\">)</span>\n      p<span class=\"typ-punct\">.</span>children<span class=\"typ-punct\">.</span><span class=\"typ-func\">first</span><span class=\"typ-punct\">(</span><span class=\"typ-punct\">)</span>\n    <span class=\"typ-punct\">}</span>\n  <span class=\"typ-punct\">}</span>\n<span class=\"typ-punct\">}</span>\n\n<span class=\"typ-key\">#</span><span class=\"typ-key\">let</span> data <span class=\"typ-op\">=</span> <span class=\"typ-func\">xml</span><span class=\"typ-punct\">(</span><span class=\"typ-str\">&quot;example.xml&quot;</span><span class=\"typ-punct\">)</span>\n<span class=\"typ-key\">#</span><span class=\"typ-key\">for</span> elem <span class=\"typ-key\">in</span> data<span class=\"typ-punct\">.</span><span class=\"typ-func\">first</span><span class=\"typ-punct\">(</span><span class=\"typ-punct\">)</span><span class=\"typ-punct\">.</span>children <span class=\"typ-punct\">{</span>\n  <span class=\"typ-key\">if</span> <span class=\"typ-func\">type</span><span class=\"typ-punct\">(</span>elem<span class=\"typ-punct\">)</span> <span class=\"typ-op\">==</span> dictionary <span class=\"typ-punct\">{</span>\n    <span class=\"typ-func\">article</span><span class=\"typ-punct\">(</span>elem<span class=\"typ-punct\">)</span>\n  <span class=\"typ-punct\">}</span>\n<span class=\"typ-punct\">}</span>\n</code></pre><div class=\"preview\"><img src=\"/en-US-v0.13.1/assets/3cb7f4941d7061f93cb7357d15706f74.png\" alt=\"Preview\"></div></div>","example":null,"self":false,"params":[{"name":"source","details":"<p>A <a href=\"/en-US-v0.13.1/reference/syntax/#paths\">path</a> to an XML file or raw XML bytes.</p>","example":null,"types":["str","bytes"],"strings":[],"default":null,"positional":true,"named":false,"required":true,"variadic":false,"settable":false}],"returns":["any"],"scope":[{"path":["xml"],"name":"decode","title":"Decode XML","keywords":[],"oneliner":"Reads structured data from an XML string/bytes.","element":false,"contextual":false,"deprecation":"`xml.decode` is deprecated, directly pass bytes to `xml` instead","details":"<p>Reads structured data from an XML string/bytes.</p>","example":null,"self":false,"params":[{"name":"data","details":"<p>XML data.</p>","example":null,"types":["str","bytes"],"strings":[],"default":null,"positional":true,"named":false,"required":true,"variadic":false,"settable":false}],"returns":["any"],"scope":[]}]}}}