Лично я использовал XSLT в полностью различном контексте. Компьютерная игра, что я продолжал работать в то время используемые тонны страниц UI, определенных с помощью XML. Во время майора осуществляют рефакторинг вскоре после выпуска мы хотели изменить структуру этих XML-документов. Мы заставили формат ввода игры следовать за намного лучшим и схемой осведомленная структура.
XSLT казался отличным выбором для этого перевода из старого формата-> Новый формат. В течение двух недель у меня было рабочее преобразование от старого до нового для наших сотен страниц. Я также смог использовать его для извлечения большой информации о расположении наших страниц UI. Я создал списки, из которых были встроены компоненты, в котором, относительно легко который я тогда использовал XSLT для записи в наши определения схемы.
кроме того, происходя из среды C++, это был очень забавный и интересный язык ведущему устройству.
я думаю, что как инструмент для перевода XML от одного формата до другого это фантастически. Однако это не единственный способ определить алгоритм, который берет XML в качестве входа и выводов Что-то . Если Ваш алгоритм достаточно сложен, то, что вход является XML, становится не важным Вашему выбору инструмента - т.е. самокрутка в C++ / Python / безотносительно.
Характерный для Вашего примера, я предположил бы, что лучшая идея будет состоять в том, чтобы создать Ваш собственный XML->, XML преобразовывают, который следует за Вашей бизнес-логикой. Затем, запишите переводчика XSLT, который просто знает о форматировании и не делает ничего умного. Это могло бы быть хорошим вторым планом, но он полностью зависит, что Вы делаете. Наличие переводчика XSLT на выводе облегчает создавать альтернативные выходные форматы - печатаемый, для мобильных телефонов, и т.д.
В зависимости от того, какие лицензии вам подходят, это однострочный с библиотекой ввода-вывода Jakarta-Commons.
Укажите кодировку символов. Не тратьте впустую код, не вводите ошибки и не замедляйте выполнение с помощью BufferedReader
.
Вот пример. Вы можете параметризовать его размером буфера, кодировкой и т. Д.
static String readString(InputStream is) throws IOException {
char[] buf = new char[2048];
Reader r = new InputStreamReader(is, "UTF-8");
StringBuilder s = new StringBuilder();
while (true) {
int n = r.read(buf);
if (n < 0)
break;
s.append(buf, 0, n);
}
return s.toString();
}
Чтение / запись из потоков в Java чрезвычайно болезненны.
public static String getStreamContents(InputStream stream) throws IOException {
StringBuilder content = new StringBuilder()
Reader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"))
String lineSeparator = System.getProperty("line.separator");
try {
String line
while ((line = reader.readLine()) != null) {
content.append(line + lineSeparator)
}
return content.toString()
} finally {
reader.close()
}
}
Using Commons-IO is likely to be the best option. For your interest, another approach is to copy all the bytes and then convert it into a String.
public static String readText(InputStream is, String charset) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bytes = new byte[4096];
for(int len;(len = is.read(bytes))>0;)
baos.write(bytes, 0, len);
return new String(baos.toByteArray(), charset);
}