преобразование - Обработка XSLT с помощью Java?




для чайников (5)

Как преобразовать XML с XSLT-процессором в Java?


Answers

Я новичок в xslt. Может ли кто-нибудь вести меня с обработкой xslt с помощью java?

Это зависит от того, какой Java-процессор XSLT вы используете. Каждый XSLT-процессор имеет свой собственный API.

Например, Saxon 6.5.5 (для XSLT 1.0) и Saxon 9.1.07 (для XSLT 2.0) написаны на Java. Документация находится по адресу http://www.saxonica.com/documentation/documentation.xml

Почти все процессоры XSLT имеют утилиту командной строки , которая не требует написания программы для выполнения преобразования XSLT.

Например, вот как начать преобразование Saxon 9.x из командной строки .

Вот как я всегда использую Saxon из командной строки :

java -Xms2048M  -Xmx10000M  -jar  
     C:\xml\Parsers\Saxon\Ver.9.1.0.7\J\saxon9.jar 
    -t  -repeat:1  -o %out%  %xml%  %xsl%  %param[ name=\"value\"]%

где %out% - имя выходного файла, %xml% - это xml-файл, %xsl% - это основной файл xslt, а %param[ name=\"value\"]% - это список значений внешних параметров (Я почти всегда оставляю это пустым).


Стандартная библиотека Java предоставляет интерфейс преобразования XSLT для синтаксического анализа XML. См. Документацию API для классов javax.xml.transform.Transformer и javax.xml.transform.TransformerFactory .


JAXP обеспечивает независимый от реализации способ работы с преобразованиями XSLT. Вот учебник, чтобы вы начали. Если вы работаете с огромным XSLT и / или работаете с несколькими XSLT, тогда есть возможность кэшировать проанализированные шаблоны XSLT по соображениям производительности. В этой статье объясняется, как кэшировать xslt's


Вот пример использования java api для трансформатора, как сказал @Raedwald:

import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

public class TestMain {
    public static void main(String[] args) throws IOException, URISyntaxException, TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        Source xslt = new StreamSource(new File("transform.xslt"));
        Transformer transformer = factory.newTransformer(xslt);

        Source text = new StreamSource(new File("input.xml"));
        transformer.transform(text, new StreamResult(new File("output.xml")));
    }
}

В ARM нет необходимости в ветке, потому что каждая команда имеет поле с 4-мя битами, которое проверяется с нулевой стоимостью. Это устраняет необходимость в коротких ветвях, и не будет никакого хита предсказания ветвления. Поэтому отсортированная версия будет работать медленнее, чем несортированная версия на ARM, из-за дополнительных накладных расходов на сортировку. Внутренний цикл будет выглядеть примерно так:

MOV R0, #0     // R0 = sum = 0
MOV R1, #0     // R1 = c = 0
ADR R2, data   // R2 = addr of data array (put this instruction outside outer loop)
.inner_loop    // Inner loop branch label
    LDRB R3, [R2, R1]     // R3 = data[c]
    CMP R3, #128          // compare R3 to 128
    ADDGE R0, R0, R3      // if R3 >= 128, then sum += data[c] -- no branch needed!
    ADD R1, R1, #1        // c++
    CMP R1, #arraySize    // compare c to arraySize
    BLT inner_loop        // Branch to inner_loop if c < arraySize






java xslt