kxml - parsing AWS API xml respond

holo via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Oct 20 09:53:16 PDT 2015


On Tuesday, 20 October 2015 at 13:23:47 UTC, opticron wrote:
> I think part of the issue here is that holo isn't quite sure of 
> what information [s]he needs out of the XML reply and how to do 
> that with XPath. The first post mentioned getting instanceId 
> and launchTime, so I'll start there using the AWS example XML 
> found here: 
> https://github.com/polopoly/cloud-ui/blob/master/aws/examples/DescribeInstances.xml
>
> You can find all parent nodes that provide this set of 
> information with XPath query "//instancesSet/item". From there, 
> you can iterate over the list and pull out the information you 
> need:
>
> auto parents = root.parseXPath("//instancesSet/item");
> foreach(parent; parents) {
>   string instanceId = 
> parent.parseXPath("instanceId")[0].getCData();
>   string launchTime = 
> parent.parseXPath("launchTime")[0].getCData();
> }
>
> In the process of checking this out, I discovered that subnode 
> predicates are broken (attribute predicates work just fine, I 
> need to write more unittests). I guess I have some things to 
> work on tonight.

Sorry i augment you work ;) . I was continuing with my project i 
came across next problem.

When im checking instance name with such code:

     auto test = 
list.parseXPath(`//tagSet/item[key="Name"]/value`)[0].goCData;

it is compiling properly but it is breaking program when is no 
name set.

I make quick workaround:

     auto tmp = list.parseXPath(`//tagSet/item[key="Name"]/value`);
             if(tmp == null)
             {
                 instances[tmpinst].instanceName = "";
             }
             else
             {
                 auto instances[tmpinst].instanceName = 
tmp[0].getCData;
             }


but is there any reason why it is not taken into consideration in 
"getCData" method?




More information about the Digitalmars-d-learn mailing list