Thread overview | |||||
---|---|---|---|---|---|
|
April 02, 2017 Experimental xml set up | ||||
---|---|---|---|---|
| ||||
To load up 3D models in my application, i decided to use the COLLADA model format, to do that i need to be able to extract information out of an xml file. Since std.xml is going to be deprecated eventually, is opted to try and use std.experiment.xml. So i created a test project and added this dependency to dub.json : "std-experimental-xml": "~>0.1.2" I then tried and compiled the exemple i found on the xml wiki at https://lodo1995.github.io/experimental.xml/std/experimental/xml.html Code : // Made sure I imported Everything import std.experimental.xml.appender; import std.experimental.xml.cursor; import std.experimental.xml.dom; import std.experimental.xml.domimpl; import std.experimental.xml.domparser; import std.experimental.xml.dtd; import std.experimental.xml.faststrings; import std.experimental.xml.interfaces; import std.experimental.xml.lexers; import std.experimental.xml.parser; import std.experimental.xml.sax; import std.experimental.xml.validation; import std.experimental.xml.writer; import std.experimental.xml.legacy; import std.stdio; void main() { string input = q"{ <?xml version = "1.0"?> <books> <book ISBN = "078-5342635362"> <title>The D Programming Language</title> <author>A. Alexandrescu</author> </book> <book ISBN = "978-1515074601"> <title>Programming in D</title> <author>Ali Çehreli</author> </book> <book ISBN = "978-0201704310"> <title>Modern C++ Design</title> <author>A. Alexandrescu</author> </book> </books> }"; // the following steps are all configurable auto domBuilder = input .lexer // instantiate the best lexer based on the type of input .parser // instantiate a parser on top of the lexer .cursor // instantiate a cursor on top of the parser .domBuilder; // and finally the DOM builder on top of the cursor // the source is forwarded down the parsing chain and everything is initialized domBuilder.setSource(input); // recursively build the entire DOM tree domBuilder.buildRecursive; auto dom = domBuilder.getDocument; // find and substitute all matching authors foreach (author; dom.getElementsByTagName("author")) if (author.textContent == "A. Alexandrescu") author.textContent = "Andrei Alexandrescu"; // write it out to "catalogue.xml" auto file = File("catalogue.xml", "w"); file.lockingTextWriter .writerFor!string // instatiates an xml writer on top of an output range .writeDOM(dom); // write the document with all of its children readln(); } When trying to compile, i get the following error : Error: no property 'lexer' for type 'string' There are also a lot of variable types not recognized by the compiler. Is the wiki example completely outdated or am i missing something? |
April 02, 2017 Re: Experimental xml set up | ||||
---|---|---|---|---|
| ||||
Posted in reply to Begah | On 02/04/2017 2:58 PM, Begah wrote: > To load up 3D models in my application, i decided to use the COLLADA > model format, to do that i need to be able to extract information out of > an xml file. > > Since std.xml is going to be deprecated eventually, is opted to try and > use std.experiment.xml. > > So i created a test project and added this dependency to dub.json : > "std-experimental-xml": "~>0.1.2" > > I then tried and compiled the exemple i found on the xml wiki at > https://lodo1995.github.io/experimental.xml/std/experimental/xml.html > > Code : > // Made sure I imported Everything > import std.experimental.xml.appender; > import std.experimental.xml.cursor; > import std.experimental.xml.dom; > import std.experimental.xml.domimpl; > import std.experimental.xml.domparser; > import std.experimental.xml.dtd; > import std.experimental.xml.faststrings; > import std.experimental.xml.interfaces; > import std.experimental.xml.lexers; > import std.experimental.xml.parser; > import std.experimental.xml.sax; > import std.experimental.xml.validation; > import std.experimental.xml.writer; > import std.experimental.xml.legacy; > import std.stdio; > > void main() { > string input = q"{ > <?xml version = "1.0"?> > <books> > <book ISBN = "078-5342635362"> > <title>The D Programming Language</title> > <author>A. Alexandrescu</author> > </book> > <book ISBN = "978-1515074601"> > <title>Programming in D</title> > <author>Ali Çehreli</author> > </book> > <book ISBN = "978-0201704310"> > <title>Modern C++ Design</title> > <author>A. Alexandrescu</author> > </book> > </books> > }"; > > // the following steps are all configurable > auto domBuilder = > input > .lexer // instantiate the best lexer based on the > type of input > .parser // instantiate a parser on top of the lexer > .cursor // instantiate a cursor on top of the parser > .domBuilder; // and finally the DOM builder on top of the > cursor > > // the source is forwarded down the parsing chain and everything is > initialized > domBuilder.setSource(input); > > // recursively build the entire DOM tree > domBuilder.buildRecursive; > auto dom = domBuilder.getDocument; > > // find and substitute all matching authors > foreach (author; dom.getElementsByTagName("author")) > if (author.textContent == "A. Alexandrescu") > author.textContent = "Andrei Alexandrescu"; > > // write it out to "catalogue.xml" > auto file = File("catalogue.xml", "w"); > file.lockingTextWriter > .writerFor!string // instatiates an xml writer on top of an > output range > .writeDOM(dom); // write the document with all of its children > > readln(); > } > > When trying to compile, i get the following error : > Error: no property 'lexer' for type 'string' > > There are also a lot of variable types not recognized by the compiler. > > Is the wiki example completely outdated or am i missing something? Quite out of date. Here is some code that worked for me: string raw_input = ...; auto domBuilder = raw_input .lexer .parser .cursor((CursorError err){}) .domBuilder; domBuilder.setSource(raw_input); domBuilder.buildRecursive; auto dom = domBuilder.getDocument; |
April 02, 2017 Re: Experimental xml set up | ||||
---|---|---|---|---|
| ||||
Posted in reply to rikki cattermole | On Sunday, 2 April 2017 at 14:15:50 UTC, rikki cattermole wrote:
> On 02/04/2017 2:58 PM, Begah wrote:
>> [...]
>
> Quite out of date.
>
> Here is some code that worked for me:
>
> string raw_input = ...;
>
> auto domBuilder = raw_input
> .lexer
> .parser
> .cursor((CursorError err){})
> .domBuilder;
> domBuilder.setSource(raw_input);
> domBuilder.buildRecursive;
> auto dom = domBuilder.getDocument;
Dub/Dmd still complains that there is no property/function 'lexer' for type string.
|
Copyright © 1999-2021 by the D Language Foundation