Как объединить 2 потока XML в Java с помощью XSLT - PullRequest
8 голосов
/ 28 апреля 2010

Я хотел бы объединить 2 потока XML (строки) в Java, обязательно с помощью XSLT (чтобы я мог изменить преобразование), но проблема в том, что XML приходят в виде строки. Есть много примеров, но через файлы. Можно ли это сделать, не сохраняя их в файлах?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 28 апреля 2010

Я знаю только способ, использующий собственную реализацию URIResolver .

public final class StringURIResolver implements URIResolver {
    Map<String, String> documents = new HashMap<String, String>();

    public StringURIResolver put(final String href, final String document) {
        documents.put(href, document);
        return this;
    }

    public Source resolve(final String href, final String base)
    throws TransformerException {
        final String s = documents.get(href);
        if (s != null) {
            return new StreamSource(new StringReader(s));
        }
        return null;
    }
}

Используйте это так:

final String document1 = ...
final String document2 = ...
final Templates template = ...
final Transformer transformer = template.newTransformer();
transformer.setURIResolver(new StringURIResolver().put("document2", document2));
final StringWriter out = new StringWriter();
transformer.transform(new StreamSource(new StringReader(document1)),
    new StreamResult(out));

И в преобразовании,ссылаться на это так:

<xsl:variable name="document2" select="document('document2')" />
0 голосов
/ 28 апреля 2010

Посмотрите на этот урок , в нем есть все, что вам нужно (с примерами).

Если вы хотите преобразовать XML в формате String, используйте что-то вроде:

Templates template = ...;
String xml = ...;
Transformer transformer = template.newTransformer();
Writer out = new StringWriter();
transformer.transform(new StreamSource(new StringReader(xml)), new StreamResult(out));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...