#java #xml #scala #namespaces
#java #xml #scala #пространства имен
Вопрос:
У меня есть документ SVG, и элемент стиля SVG имеет атрибут xml:space=»сохранить».
При попытке проанализировать этот документ с помощью Scala генерируется исключение с исключением трассировки стека в потоке «main» org.xml.sax.SAXParseException: пространство имен xml не определено в com.dautelle.xml.sax.RealtimeParser.ParseError(неизвестный источник) в com.dautelle.xml.sax.RealtimeParser.processAttribute(неизвестный источник) в com.dautelle.xml.sax. RealtimeParser.parseContent (неизвестный источник) в com.dautelle.xml.sax.RealtimeParser.parse (неизвестный источник) в com.dautelle.xml.sax.XMLReaderImpl.parse (неизвестный источник) в javax.xml.parsers.SAXParser.parse (SAXParser.java:395) в scala.xml.factory.XMLLoader$class.loadXML(XMLLoader.scala:40) в scala.xml.XML $.loadXML(XML.scala:40) в scalaapplication11.Main$.main(Main.scala:144) в scalaapplication11.Main.main(Main.scala) Результат Java: 1
Вот верхняя часть элемента SVG <svg xmlns=»http://www.w3.org/2000/svg » xmlns: jdipNS=»http://jdip.sourceforge.org/jdipNS » xmlns:xlink=»http://www.w3.org/1999/xlink » цветопередача =»Оптимизация качества» contentScriptType=»текст / ecmascript» contentStyleType=»текст / css» height =»680px» preserveAspectRatio =»xMinYMin» version = «1.0» viewBox =»0 0 1835 1360″ width =»918px» zoomAndPan=»увеличить»>
а вот элемент стиля <style type=»text/css» xml:space=»preserve»><![CDATA[
/* text */
.titletext {text-anchor:middle;stroke-width:0.3;font-family:sansserif;font-size:12;stroke:black;fill:black;}
.provtext {text-anchor:middle;stroke-width:0.3;font-family:sansserif;font-size:12;stroke:black;fill:black;}
.labeltext {stroke-width:0.1;stroke:black;fill:black;}
.unordered {fill:red; stroke:black; stroke-width:1;fill-opacity:0.90;}
.labeltext
и я смог использовать Java DocumentBuilderFactory для добавления атрибута xmlns: jdipNS в корень документа. Но xmlns: xml не добавляется (вероятно, потому, что это стандартное пространство имен). Я в недоумении, как заставить Scala обрабатывать пространство имен xml.
Ответ №1:
На первый взгляд это выглядит как серьезная ошибка в dautelle (Javolution?) Анализатор XML. Я не очень хорошо знаю среду Scala, но, похоже, анализатор был выделен с использованием стандартного Java DocumentBuilderFactory, поэтому вы должны иметь возможность переключиться на другой анализатор XML, просто изменив свой путь к классу.
Комментарии:
1. Спасибо. Я загрузил в реализацию Apache Xerces, и это решило проблему.