[erlang-questions] Compare XML string

Sand T <>
Tue Jun 29 09:03:00 CEST 2010


Hi Willem,

Thanks for the response. I am using erlsom but dont have XSD as I am
getting all this XML as a part of server responses during runtime. All
I need to do is compare the server response with the expected response
and conclude whether the server response is exactly similar to the
expected [XML] response.

Expecting some quick response.

Regards,
Sandeep

On Tue, Jun 29, 2010 at 12:23 PM, Willem de Jong <> wrote:
> Hi Sandeep,
>
> If you have an XSD for the XML, then you can use erlsom:scan(). I believe
> that the output for two different XMLs with the same "meaning" will be
> identical. It will also help you to identify XML strings that are not
> correct (ie not in accordance with the XSD), and it may make the processing
> of the XML easier.
>
> You can find erlsom on sourceforge or on github
> (http://github.com/willemdj/erlsom)
>
> Regards,
> Willem
>
>
>
> On Tue, Jun 29, 2010 at 6:53 AM, Sand T <> wrote:
>>
>> Any suggestions from the team?
>>
>> Regards,
>> Sandeep
>>
>> > Hi Michael,
>> >
>> > I need to compare two XML string and the XML string attribute order,
>> > value can be different as you pointed out in your explanation. The
>> > comparison should give *false* only if the value of attribute is
>> > different or some attribute is missing, It should not give *false* if
>> > order of attribute is different. However, when I perform,
>> >
>> >>   {Given, _} = xmerl_scan:file("Given.xml"),
>> >>   {Expected,_} = xmerl_scan:file("Expected.xml"),
>> >> --then directly compare the resulting data structures in the obvious
>> >> (?)
>> >> way:
>> >>   Virtually_identical = (Given =:= Expected)
>> >
>> > it gives me *false* if the order of attribute is different. The two
>> > example string that I used is
>> >
>> > S="<xml session=\"123\"><response type=\"progress\" code=\"100\"
>> > im=\"IM\" login=\"L\">Connected To Server</response></xml>".
>> >
>> > Exp = "<xml session=\"123\"><response type=\"progress\" im=\"IM\"
>> > code=\"100\" login=\"L\">Connected To Server</response></xml>".
>> >
>> > Regards,
>> > Sandeep
>> >
>> > On Fri, Jun 25, 2010 at 8:56 PM, Michael Turner
>> > <> wrote:
>> >> I feel like I must be missing something in your question.  Let's say
>> >> that
>> >> the Given XML is in a file Given.xml, the Expected in a file
>> >> Expected.xml.
>> >>  Just read them in--
>> >>   {Given, _} = xmerl_scan:file("Given.xml"),
>> >>   {Expected,_} = xmerl_scan:file("Expected.xml"),
>> >> --then directly compare the resulting data structures in the obvious
>> >> (?)
>> >> way:
>> >>   Virtually_identical = (Given =:= Expected)
>> >> Of course, the two files could be different in certain inconsequential
>> >> details, such as having have the same set of attributes in an XML
>> >> element
>> >> but in a different order, and/or having different tag formatting in
>> >> whitespace.  E.g., Expected.xml might literally have
>> >>   <sometag id="me" value="1 cent"/>
>> >> while Given.xml had
>> >>   <sometag
>> >>         value = "1 cent"
>> >>         id = me
>> >>   />
>> >> but the comparison above with Given with Expected (the resulting tree
>> >> structures) would still yield true all other things being equal.  Isn't
>> >> that
>> >> what you want, though?
>> >> If you want to know the contents of the two files *AS STRINGS* are
>> >> identical
>> >> (regardless of whether they are XML, I suppose), why not just read them
>> >> in
>> >> (say as binaries) and compare them?
>> >> -michael turner
>> >>
>> >> On Fri, Jun 25, 2010 at 3:43 PM, Sand T <>
>> >> wrote:
>> >>>
>> >>> Hi,
>> >>>
>> >>> I need to compare two given XML string to ensure that the two strings
>> >>> are identical or not at runtime. Does anyone have any idea on how to
>> >>> do this in erlang?
>> >>>
>> >>> Following are some of the examples
>> >>> Given String
>> >>> <response type=\"progress\" im=\"IM\" login=\"ABC\"
>> >>> code=\"102\">Authentication Successful ...</response>
>> >>> Exp String:
>> >>> <response type=\"progress\" im=\"IM\" login=\"ABC\"
>> >>> code=\"102\">Authentication Successful ...</response>
>> >>>
>> >>> Eq 2:
>> >>> Given String
>> >>> <response type=\"progress\" im=\"IM\" login=\"ABC\"
>> >>> code=\"102\">Authentication Successful ...</response>
>> >>> <buddies im=\"IM\" login=\"ABC\"><buddy name=\"XYZ\" nickname=\"\"
>> >>> status=\"offline\" custom=\"Is offline\" group=\"Friends\"
>> >>> blocked=\"no\"/></buddies>
>> >>>
>> >>> Expected:
>> >>> <response type=\"progress\" im=\"IM\" login=\"ABC\" >Authentication
>> >>> Successful ...</response>
>> >>> <buddies im=\"IM\" login=\"ABC\" ><buddy name=\"XYZ\" nickname=\"\"
>> >>> status=\"online\" custom=\"Is offline\" group=\"Friends\"
>> >>> blocked=\"no\"/></buddies>
>> >>>
>> >>> Regards,
>> >>> Sandeep
>> >>>
>> >>> ________________________________________________________________
>> >>> erlang-questions (at) erlang.org mailing list.
>> >>> See http://www.erlang.org/faq.html
>> >>> To unsubscribe; mailto:
>> >>>
>> >>
>> >>
>> >
>>
>> ________________________________________________________________
>> erlang-questions (at) erlang.org mailing list.
>> See http://www.erlang.org/faq.html
>> To unsubscribe; mailto:
>>
>
>


More information about the erlang-questions mailing list