Как читать и выводить инструкции по обработке XML в Scala? - PullRequest
4 голосов
/ 14 мая 2011

Я пишу небольшое приложение Scala, которое выполняет следующее:

1) Чтение файлов XML / XHTML

2) Небольшая предварительная обработка

3) При необходимости преобразуйте его с помощью таблицы стилей XSLT.

4) Слегка обработайте его.

5) Сохраните его как XHTML.

Мои XML-файлы начинаются с чего-то вроде:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../xslt/default.xslt"?>

Если я читаю их с

scala.xml.XML.load(scala.xml.Source.fromFile(file))

Я получаю Elem, но я теряю инструкции по обработке XML. Я прибег к чтению его как String, выполняя манипуляции с String, чтобы найти таблицу стилей xml, а затем передавая ее

scala.xml.XML.load(scala.xml.Source.fromString(text))

Должен быть лучший способ сделать это. Мне нужно знать, какую таблицу стилей я должен использовать внутри Scala , потому что Scala должен вызывать процессор XSLT, если это необходимо.

Кроме того, после того, как я закончу их обработку, я сохраняю их, используя

scala.xml.Utility.trim(transformed).buildString(true)

но полученный документ не содержит ни декларации XML, ни HTML DOCTYPE. Я тоже хочу иметь их.

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

1 Ответ

2 голосов
/ 14 мая 2011

По сути, Scala XML не подходит для ваших нужд. Даже с xml.parsing.XhtmlParser, который генерирует Document, вы получите только версию, кодировку и dtd. Вы можете создать конструирующий синтаксический анализатор, анализатор событий или переопределить XML с помощью пользовательского SAXParser, чтобы получить материал XSLT, но вы все равно не сможете представить эту информацию в Scala XML, и вам все равно придется кодировать свое сохранение чтобы добавить это обратно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...