www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - What's dxml DOMEntity(R) type ?

reply John Xu <728308756 qq.com> writes:
The parseDOM returns a DOMEntity(R) type, how do I write a 
xmlRoot as global variable?
I need its detailed type (auto / Variant doesn't work).


         import dxml.dom;
         ?? xmlRoot;
         int main() {
             string xml = readText("a.xml");
             auto dom = parseDOM(xml);
             xmlRoot = dom.children[0];
         }
Jun 05 2023
parent reply Ferhat =?UTF-8?B?S3VydHVsbXXFnw==?= <aferust gmail.com> writes:
On Monday, 5 June 2023 at 10:01:01 UTC, John Xu wrote:
 The parseDOM returns a DOMEntity(R) type, how do I write a 
 xmlRoot as global variable?
 I need its detailed type (auto / Variant doesn't work).


         import dxml.dom;
         ?? xmlRoot;
         int main() {
             string xml = readText("a.xml");
             auto dom = parseDOM(xml);
             xmlRoot = dom.children[0];
         }
```d import dxml.dom; import std.stdio; DOMEntity!string xmlRoot; int main() { string xml = "<some></some>"; auto dom = parseDOM(xml); writeln(typeof(dom.children[0]).stringof); // yields "DOMEntity!string" xmlRoot = dom.children[0]; return 0; } ```
Jun 05 2023
next sibling parent John Xu <728308756 qq.com> writes:
On Monday, 5 June 2023 at 10:43:27 UTC, Ferhat Kurtulmuş wrote:
 On Monday, 5 June 2023 at 10:01:01 UTC, John Xu wrote:
 The parseDOM returns a DOMEntity(R) type, how do I write a 
 xmlRoot as global variable?
 I need its detailed type (auto / Variant doesn't work).


         import dxml.dom;
         ?? xmlRoot;
         int main() {
             string xml = readText("a.xml");
             auto dom = parseDOM(xml);
             xmlRoot = dom.children[0];
         }
```d import dxml.dom; import std.stdio; DOMEntity!string xmlRoot; int main() { string xml = "<some></some>"; auto dom = parseDOM(xml); writeln(typeof(dom.children[0]).stringof); // yields "DOMEntity!string" xmlRoot = dom.children[0]; return 0; } ```
Thanks, that's very helpful. D sometimes drives me crazy, screws up my brain, :-)
Jun 05 2023
prev sibling parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
On 6/5/23 6:43 AM, Ferhat Kurtulmuş wrote:
 On Monday, 5 June 2023 at 10:01:01 UTC, John Xu wrote:
 The parseDOM returns a DOMEntity(R) type, how do I write a xmlRoot as 
 global variable?
 I need its detailed type (auto / Variant doesn't work).


         import dxml.dom;
         ?? xmlRoot;
         int main() {
             string xml = readText("a.xml");
             auto dom = parseDOM(xml);
             xmlRoot = dom.children[0];
         }
```d import dxml.dom; import std.stdio;     DOMEntity!string xmlRoot;     int main()     {         string xml = "<some></some>";         auto dom = parseDOM(xml);         writeln(typeof(dom.children[0]).stringof); // yields "DOMEntity!string"         xmlRoot = dom.children[0];         return 0;     }     ```
In general, the easiset thing to do is use typeof, though it's not always pretty (and not always obvious how to write it). However, it's required for voldemort types. ```d typeof(parseDom("")) DomEntity; ``` -Steve
Jun 06 2023
parent reply Ferhat =?UTF-8?B?S3VydHVsbXXFnw==?= <aferust gmail.com> writes:
On Tuesday, 6 June 2023 at 14:16:37 UTC, Steven Schveighoffer 
wrote:
 On 6/5/23 6:43 AM, Ferhat Kurtulmuş wrote:
 On Monday, 5 June 2023 at 10:01:01 UTC, John Xu wrote:
 [...]
```d import dxml.dom; import std.stdio;     DOMEntity!string xmlRoot;     int main()     {         string xml = "<some></some>";         auto dom = parseDOM(xml);         writeln(typeof(dom.children[0]).stringof); // yields "DOMEntity!string"         xmlRoot = dom.children[0];         return 0;     }     ```
In general, the easiset thing to do is use typeof, though it's not always pretty (and not always obvious how to write it). However, it's required for voldemort types. ```d typeof(parseDom("")) DomEntity; ``` -Steve
İt is one of the nicest features of d. I believe it should not be used too often because it may cause longer compilation times, worse code reading, less comfort with d code scanners, editors etcetera.
Jun 06 2023
parent Steven Schveighoffer <schveiguy gmail.com> writes:
On 6/6/23 12:15 PM, Ferhat Kurtulmuş wrote:
 On Tuesday, 6 June 2023 at 14:16:37 UTC, Steven Schveighoffer wrote:
 In general, the easiset thing to do is use typeof, though it's not 
 always pretty (and not always obvious how to write it). However, it's 
 required for voldemort types.

 ```d
 typeof(parseDom("")) DomEntity;
 ```
 İt is one of the nicest features of d. I believe it should not be used 
 too often because it may cause longer compilation times, worse code 
 reading, less comfort with d code scanners, editors etcetera.
It should not affect compile times at all. If you are going to instantiate it that way, it will need to be compiled regardless. `typeof` is very low cost, as it's a direct call on the compiler internals. Something like `ReturnType!Foo` is different. -Steve
Jun 06 2023