2

I have some enormous XML-based configuration files, with 125000 lines in them. The problem is that they are auto-generated by the system I use, and "child" tags are in a random order within their respective parent tag. This means that a diff comparison is impossible.

I want to recursively sort all tags within a parent tag by the value in name="". Some parent tags only appear once and don't have a name="" parameter; these should be sorted by the tag name itself.

Once the files are sorted like this, they can be compared quite easily using normal tools. We are currently using ExamXML which can match unsorted XML files, but it fails because the files are too big.

Is there an application that can do this? (Windows much preferred; Linux only as a last resort)

I do not want to dive into development or XSLT jobs. I am thinking that someone must have made a simple sorting tool like this already - I just can't find it using Google.

Update:
With help from this site, I created a small package that I want to share: XML-Sorter_v0.4public.zip

Update: Follow-up question here.

1 Answer 1

4

I know you don't want to dive into XSLT, but it's by far the easiest way of doing it. All it takes is:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates>
      <xsl:sort select="(@name, name())[1]"/>
    </xsl:apply-templates>
  </xsl:copy>
</xsl:template>
</xsl:stylesheet>
2
  • I have no understanding of XSLT, but this looks like it automatically runs through the tag names so I don't have to enumerate them. That is a BIG advantage over other XSLT-based solutions I've seen in my searches! Given your example, can I just take this and run it, or how would I need to adapt it? How do I actually "run" an XSLT? In a browser? (XML noob speaking...) Commented Nov 8, 2011 at 19:07
  • How to run: I found this somewhat related question but I don't really understand the answers. Commented Nov 8, 2011 at 19:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .