dxml 0.2.0 released

Aravinda VK mail at aravindavk.in
Mon Feb 12 07:36:52 UTC 2018


On Monday, 12 February 2018 at 05:36:51 UTC, Jonathan M Davis 
wrote:
> dxml 0.2.0 has now been released.
>
> I really wasn't planning on releasing anything this quickly 
> after announcing dxml, but when I went to start working on DOM 
> support, it turned out to be surprisingly quick and easy to 
> implement. So, dxml now has basic DOM support.
>
> As part of that, it became clear that dxml.parser.stax should 
> be renamed to dxml.parser, since it's really the only parser 
> (DOM support involves just providing a way to hold the results 
> of the parser, not any actual parsing, and that's clear from 
> the API rather than being an implementation detail), and it 
> makes for a shorter import path. So, I figured that I should do 
> a release sooner rather than later to reduce how many folks the 
> rename ends up affecting.
>
> For this release, dxml.parser.stax is now an empty, deprecated, 
> module that publicly imports dxml.parser, but it will be 
> removed in 0.3.0, whenever that is released. So, the few folks 
> who grabbed the initial release won't end up with immediate 
> code breakage if they upgrade.
>
> One nice side effect of how I implemented DOM support is that 
> it's trivial to get the DOM for a portion of an XML document 
> rather than the entire thing, since it will produce a DOMEntity 
> from any point in an EntityRange.
>
> Documentation: http://jmdavisprog.com/docs/dxml/0.2.0/
> Github: https://github.com/jmdavis/dxml/tree/v0.2.0
> Dub: http://code.dlang.org/packages/dxml
>
> - Jonathan M Davis

Awesome. Just tried it now as below and it works. Thanks for this 
library

import std.stdio;

import dxml.dom;

struct Record
{
     string name;
     string email;
}


Record[] parseRecords(string xml)
{
     Record[] records;
     auto d = parseDOM!simpleXML(xml);
     auto root = d.children[0];

     foreach(record; root.children)
     {
         auto rec = Record();
         foreach(ele; record.children)
         {
             if (ele.name == "name")
                 rec.name = ele.children[0].text;
             if (ele.name == "email")
                 rec.email = ele.children[0].text;
         }
         records ~= rec;
     }

     return records;
}

void main()
{
     auto xml = "<root>\n" ~
         "    <record>\n" ~
         "        <name>N1</name>\n" ~
         "        <email>E1</email>\n" ~
         "    </record>\n" ~
         "    <record>\n" ~
         "        <name>N2</name>\n" ~
         "        <email>E2</email>\n" ~
         "    </record>\n" ~
         "    <record>\n" ~
         "        <email>E3</email>\n" ~
         "        <name>N3</name>\n" ~
         "    </record>\n" ~
         "<!--no comment -->\n" ~
         "</root>";
     auto records = parseRecords(xml);
     writeln(records);
}


More information about the Digitalmars-d-announce mailing list