Parsing XML attributes

I’m exploring the possibility of parsing XML files in Zola using the built-in function load_data. From my tests, I have confirmed that it is possible to access XML elements using dot notation. However, I have not found a way to access attributes within those elements.

For context, I am working with OPML files. Here’s a simplified example of an OPML file:

<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
    <head>
        <title>Sample OPML</title>
    </head>
    <body>
        <outline text="Tech Blogs">
            <outline text="Example Blog" type="rss" xmlUrl="https://example.com/rss.xml" htmlUrl="https://example.com"/>
        </outline>
    </body>
</opml>

Using load_data, I can access elements like opml.head.title or iterate over opml.body.outline. However, I haven’t found a way to extract attributes like xmlUrl or htmlUrl from the <outline> elements.

My questions

  • Is there a way to access XML attributes using Tera/Zola’s built-in functions?
  • If not, is this a current limitation of Tera, or is there a workaround available within Zola?

For reference, Hugo offers a built-in way to access XML attributes, as described in its documentation.

Although I don’t have an answer to the two questions I asked in my previous post, I have solved it by converting the XML file to a JSON file.

This is an extra step that is executed in the python script that automatically generates the content that is displayed in the Blogroll section of my blog.