Hi Tommi,

ok I understand, you don't want to have stuff in there that is only
relevant for one specific use case.

I think your solution is very good, also I don't need a distinction between
nodes and attributes.

Best regards
Raphael





2014-11-13 19:44 GMT+01:00 Tommi Mäkitalo <[email protected]>:

>  Hi,
>
> I would really prefer not to extend SerializationInfo. That structure
> should be generic and not specific to xml. It is also used for other
> formats. So I am looking for ways to pack the attributes somehow into that
> structure. My idea is, that we optionally translate the attributes into
> values, so that we get a structure like that:
>
> name = "head"
>     node[0]
>             name = "OneGroup"
>             typeName = OneGroup
>             node[0]
>                     name = "OneGroupId"
>                     type = string
>                     value = "998877"
>                     typeName = OneGroupId
>                     node[0]
>                             name = "OneGroupAttrib"
>                             type = string
>                             value = "TTT"
>     node[1]
>             name = "SecondGroup"
>             typeName = SecondGroup
>             node[0]
>
> So it produces exactly the same structure like this XML:
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
>     <head>
>     <OneGroup>
>         <OneGroupId>998877
>              <OneGroupAttrib>TTT</OneGroupAttrib>
>         </OneGroupId>
>     </OneGroup>
>
> But is it really a problem? What do you think?
>
>
> Tommi
>
>
>
>
>
> Am 13.11.2014 um 14:28 schrieb Raphael Fuchs:
>
>   Hi Tommi,
>
> thank you for your reply!
>
> Here is an example which is in a format I would like to parse in real life:
> -----------------------------------------------------------------
> <?xml version="1.0" encoding="ISO-8859-1"?>
>  <head>
> <OneGroup>
>     <OneGroupId OneGroupAttrib="TTT">998877</OneGroupId>
> </OneGroup>
> <SecondGroup>
>     <TheField attribNameA="AAA"
> attribNameB="BBB">someValueofTheField</TheField>
>     <InnerGroup attribName1="AttrContent"
> attribName2="SecondAttribContent">
>         <TagName>TATATA</TagName>
>     </InnerGroup>
> </SecondGroup>
> </head>
> -----------------------------------------------------------------
>
> With the current cxxtools implementation it would look like this:
> -----------------------------------------------------------------
> name = "head"
> node[0]
>         name = "OneGroup"
>         typeName = OneGroup
>         node[0]
>                 name = "OneGroupId"
>                 type = string
>                 value = "998877"
>                 typeName = OneGroupId
> node[1]
>         name = "SecondGroup"
>         typeName = SecondGroup
>         node[0]
>                 name = "TheField"
>                 type = string
>                 value = "someValueofTheField"
>                 typeName = TheField
>         node[1]
>                 name = "InnerGroup"
>                 typeName = InnerGroup
>                 node[0]
>                         name = "TagName"
>                         type = string
>                         value = "TATATA"
>                         typeName = TagName
> name = "OneGroup"
> typeName = OneGroup
> node[0]
>         name = "OneGroupId"
>         type = string
>         value = "998877"
>         typeName = OneGroupId
> name = "SecondGroup"
> typeName = SecondGroup
> node[0]
>         name = "TheField"
>         type = string
>         value = "someValueofTheField"
>         typeName = TheField
> node[1]
>         name = "InnerGroup"
>         typeName = InnerGroup
>         node[0]
>                 name = "TagName"
>                 type = string
>                 value = "TATATA"
>                 typeName = TagName
> -----------------------------------------------------------------
>
>
> How could OneGroupId be reflected to see that it has
> - an attribute with typeName "OneGroupAttrib" and value "TTT"
> - and a value of 998877?
>
> Suggestion:
>      node[0]
>                 name = "OneGroupId"
>                 type = string
>                 value = "998877"
>                 typeName = OneGroupId
>                 attributes = {[OneGroupAttrib, TTT]}
>
>
> How could InnerGroup be reflected to see that it has
> - an attribute with typeName "attribName1" and value "AttrContent"
> - a second attribute with typeName "attribName2" and value
> "SecondAttribContent"
> - and a Tag with typename "TagName" and content "TATATA"
>
>  node[1]
>                 name = "InnerGroup"
>                 typeName = InnerGroup
>                 attributes = { [attribName1,AttrContent] ,
> [attribName2,SecondAttribContent] }
>                 node[0]
>                         name = "TagName"
>                         type = string
>                         value = "TATATA"
>                         typeName = TagName
>
> Since the attributes are never hierachical, a good way could be to return
> the attribues in a new function like this "map<string, string>
> getAttributes()".
>
> What do you think?
>
> Best regards,
> Raphael
>
>
>
>
> Am 12.11.2014 um 18:54 schrieb Tommi Mäkitalo:
>
>  Hi,
>
> the xml deserializer does not read XML attributes. So no luck currently.
>
> But we can change it if desired. I've thought about it.
>
> Lets first look at the problem. The deserializer actually converts a xml
> structure into a cxxtools::SerializationInfo. The SerializationInfo node
> has a value, a name, a type, a category and a vector of nodes. So the
> deserializer has to somehow pack all information from the XML structure
> into the SerializationInfo.
>
> The name and the type are strings. The category may be Void, Value, Object
> or Array. The value is a union which takes a scalar value.
>
> When we have a structure like:
>
>   <foo><bar>value</bar></foo>
>
> the serializationinfo will have one subnode with the name "bar" and the
> string value "value". The <foo> node may contain the attributes "type" and
> "category". The "type" is put into the type field and the category may have
> the value "array", "struct" or "value" and is converted to the enum.
>
> So there is actually nothing, we can put arbitrary attributes into. When
> we have:
>
>   <foo baz="42"><bar>value</bar></foo>
>
> the deserializer do not know what to do with the attribute "baz" and hence
> ignores it.
>
> A solution, which comes into my mind is to add an option into the
> deserializer to convert the attributes also to a sub node. When enabled,
> the deserializer will convert the above structure into a SerializationInfo
> with 2 sub nodes. One with the name "baz" and the other "bar". But in that
> case we can't distinguish between a attribute and a subnode. Maybe we can
> set the category of the subnode (<bar> in that case) to Array since it
> potentially can have other subnodes. We get an empty array with a name then.
>
> That is quite easy to implement and feel, that it would be useful in the
> future.
>
> I know that it is not that easy to understand and for me not that easy to
> explain. I hope, that you can see, what I try to achieve.
>
>
> Tommi
>
>
> Am 10.11.2014 um 17:45 schrieb Raphael Fuchs:
>
>  Hello,
>
> I want to read the following xml with all the fields and attributes:
>
> ---------------------------------------------------------------------------------------------
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <rootelement someId="11756">
>     <subgroup subgroupId="25">
>         <someString>this is a string</someString>
>     </subgroup>
> </rootelement>
> ---------------------------------------------------------------------------------------------
>
>
> But I cannot read the attributes "someId" and "subgroupId".
>
> I tried with the following code that just prints to the logfile:
>
> ---------------------------------------------------------------------------------------------
>
> void operator>>= (const cxxtools::SerializationInfo& si, Dummy& fields)
> {
>     size_t count = si.memberCount();
>     log_info("root: " << si.name());
>
>     for (size_t idx = 0; idx < count; ++idx)
>     {
>         // get current field
>         cxxtools::SerializationInfo oneField = si.getMember(idx);
>
>         if (oneField.memberCount() > 0) // it is a group
>         {
>             log_info("Group: " << oneField.typeName());
>             // keep name of current parent in mind
>             parentName.push(oneField.typeName());
>
>             oneField >>= fields;
>
>             // get rid of the last groupname
>             parentName.pop();
>         }
>         else
>         {
>             std::string value;
>             oneField.getValue(value);
>             log_info("Field: " << oneField.typeName() << ": " << value);
>         }
>     }
> }
> ---------------------------------------------------------------------------------------------
>
>
>
> Could someone give me a hint on how to read the attributes?
>
> Cheers
> Raphael
>
>
>
> ------------------------------------------------------------------------------
>
>
>
> _______________________________________________
> Tntnet-general mailing 
> [email protected]https://lists.sourceforge.net/lists/listinfo/tntnet-general
>
>
>
>
>   
> ------------------------------------------------------------------------------
> Comprehensive Server Monitoring with Site24x7.
> Monitor 10 servers for $9/Month.
> Get alerted through email, SMS, voice calls or mobile push notifications.
> Take corrective actions from your mobile 
> device.http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
>
>
>
>  _______________________________________________
> Tntnet-general mailing 
> [email protected]https://lists.sourceforge.net/lists/listinfo/tntnet-general
>
>
>
> --
> Comyno Ltd.
> Mainzer Landstrasse 46
> 60325 Frankfurt
> www.comyno.com
>
>
>
>
> ------------------------------------------------------------------------------
> Comprehensive Server Monitoring with Site24x7.
> Monitor 10 servers for $9/Month.
> Get alerted through email, SMS, voice calls or mobile push notifications.
> Take corrective actions from your mobile 
> device.http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
>
>
>
> _______________________________________________
> Tntnet-general mailing 
> [email protected]https://lists.sourceforge.net/lists/listinfo/tntnet-general
>
>
>
>
> ------------------------------------------------------------------------------
> Comprehensive Server Monitoring with Site24x7.
> Monitor 10 servers for $9/Month.
> Get alerted through email, SMS, voice calls or mobile push notifications.
> Take corrective actions from your mobile device.
>
> http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
> _______________________________________________
> Tntnet-general mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/tntnet-general
>
>
------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
Tntnet-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tntnet-general

Reply via email to