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