Преобразование XML в Java с лучшей производительностью - PullRequest
0 голосов
/ 19 марта 2012

Я хочу сделать некоторые манипуляции с контентом XML в Java. См. Ниже 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>

Как показано, у меня есть Source xml, и я хочу использовать для этого целевой xml. Единственное отличие, которое мы можем наблюдать, это root_element "ns1: Order" - заменить на "OrderData" в target xml.

Fyi, OrderHeader имеет один подэлемент Image, который содержит двоичное изображение размером 250 КБ (поэтому этот xml будет большим). Кроме того, корневой элемент целевого xml "OrderData" хорошо известен заранее.

Теперь я хочу добиться указанного выше результата в java с наилучшей производительностью. У меня уже есть исходный xml-контент в виде байта [], и я хочу, чтобы целевой xml-контент также был в байте [] .. Я тоже открыт для использования Sax-парсера.

Пожалуйста, предоставьте решение, которое имеет наилучшую производительность для выполнения вышеуказанных задач.

Спасибо заранее, Нурали

Ответы [ 4 ]

1 голос
/ 19 марта 2012

Вы имеете в виду производительность машины или человека? Трата бесконечного количества времени программиста на достижение микроскопического прироста производительности машины - странный компромисс в наши дни, когда мощный компьютер стоит примерно столько же, сколько полдня времени контрактного программиста.

Я бы порекомендовал использовать XSLT. Это может быть не самым быстрым, но это будет достаточно быстро. При таком простом преобразовании производительность XSLT будет зависеть от затрат на разбор и сериализацию, и они не будут хуже, чем для любого другого решения.

0 голосов
/ 19 марта 2012

Я использовал XLST для преобразования XML-документов.Это еще один способ сделать это.Существует несколько реализаций Java процессоров XLST.

0 голосов
/ 19 марта 2012

Самый быстрый способ манипулировать строками в Java - использовать прямое манипулирование и StringBuilder для получения результатов.Я написал код для изменения строк размером 20 МБ, который создал таблицу местоположений изменений, а затем скопировал и изменил строку в новый StringBuilder.Для строк XSLT и RegEx намного медленнее, чем прямые манипуляции, а парсеры SAX / DOM еще медленнее.

0 голосов
/ 19 марта 2012

Немного побьет прямые байты / манипуляции со строками, например, регулярное выражение.

Но будьте осторожны, манипулирование XML с помощью Regex всегда горячая дискуссия

...