nurali.techie
nurali.techie

Reputation: 13

XML transformation in Java with best Performance

I want to do some manipulation on xml content in Java. See below xml

From Source XML:
<ns1:Order xmlns:ns1="com.test.ns" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <OrderHeader>
        <Image>Image as BinaryData of size 250KB</Image>
    </OrderHeader>
</ns1:Order>

Target XML:
<OrderData>
    <OrderHeader>
        <Image>Image as BinaryData of size 250KB</Image>
    </OrderHeader>
</OrderData>

As shown, I have Source xml and I want target xml for that .. The only difference we can observe is root_element "ns1:Order" is replace with "OrderData" in target xml.

Fyi, OrderHeader has one sub-element Image which holds binary image of 250KB (so this xml going to be large one) .. also root element of target xml "OrderData" is well-known in advance.

Now, I want to achieve above result in java with best performance .. I have Source xml content already as byte[] and I want target xml content also as byte[] .. I am open to use Sax parser too.

Please provide the solution which has best performance for doing above stuff.

Thanks in advance, Nurali

Upvotes: 0

Views: 1891

Answers (4)

Michael Kay
Michael Kay

Reputation: 163322

Do you mean machine performance or human performance? Spending an infinite amount of programmer time to achieve a microscopic gain in machine performance is a strange trade-off to make these days, when a powerful computer costs about the same as half a day of a contract programmer's time.

I would recommend using XSLT. It might not be fastest, but it will be fast enough. For a simple transformation like this, XSLT performance will be dominated by parsing and serialization costs, and those won't be any worse than for any other solution.

Upvotes: 1

Michael Shopsin
Michael Shopsin

Reputation: 2138

The fastest way to manipulate strings in Java is using direct manipulation and the StringBuilder for the results. I wrote code to modify 20 mb strings that built a table of change locations and then copied and modified the string into a new StringBuilder. For Strings XSLT and RegEx are much slower than direct manipulation and SAX/DOM parsers are slower still.

Upvotes: 0

sarahTheButterFly
sarahTheButterFly

Reputation: 1952

I used XLST to transform XML documents. That's another way to do it. There are several Java implementations of XLST processors.

Upvotes: 0

Bruno Grieder
Bruno Grieder

Reputation: 29814

Not much will beat direct bytes/String manipulation, for instance, a regular expression.

But be warned, manipulating XML with Regex is always a hot debate

Upvotes: 0

Related Questions