Что-то я не понял в jdk 1.4 jaxp пользовалься Crimson'ом
И я для опеределения сосбтвенных DOM елементов использовал наследование от
org.apache.crimson.tree.ElementNode
Дабы не имплементить весь здоровый
org.w3c.dom.Element
Всё было отлично пока не перенёс дамой, там стоит jdk1.5, и не обнаружил что, нету у меня Crimson'a =\\
Я где-то слышал что jaxp вместо crimson может использовать xerces.
Смотрел на
java.sun.com там информации не нашол.
Но я не расстроилься и скачал отдельно сибе Crimson 1.3.
В итоге среда/компилятор стали ругаться на исходники самого же кримсона,
говоря что в
org.apache.crimson.tree.ElementNode
нехватает имплементации метода.
org.w3c.dom.Element.SetIdAttribute(String, boolaen)
Который как написано
@since DOM Layer 3
Раньше его вобше не было =\\
Что странно в исходниках кримсона в
ord.w3c.dom.Element
такого метода нет
Не могу понять откуда он взялься и откуда среда цепляет Element c этим методом.
И как тогда вобше жить
Если я хочу иметь собственную реализацию Element'а такую чтоб она и в 1.4 и в 1.5 работала корректно.
И ещё не понятно, что же мне ? реализовывать весь Element в своём классе ?
Ни что в жизни ни даёться так просто как... хотелось бы...
Оказываеться что в jdk1.5
org.w3c был как-то переопределён/расширен.
Сейчас проблема решилась, тем что, Отдельно стоит Crimson, и в настройках среды у неё приоритет больший чем у jdk.
И цепляеться соотвественно классы из Crimsona где всё нормально.
Только не ясно, в среде то я приоритет поставил...и всё отлично
А как его задать для
javac, или хотябы
ant'а ?
Здравствуйте, Trean, Вы писали:
T>А если не секрет зачем наследоваться от ElementNode или Element? И зачем завязываться на конкретную реализацию.
Завязываться на конкретную реализацию хотелось бы не сильно, но тем не менее ничего стращного я в этом не вижу, онож xml.
В общем случае задача такова. Считать из БД несколько сотен объектов. Зделать по ним отчёты представленные в разных форматах. Решено представлять в xml а патом посердствам xsl уже трансформировать.
Самое не приятное что потом нужно уметь делать отчёты по готовым отчётам, о произошедших изменениях.
Для этого был написан класс, который включает в себя всю необходимую для отчётности информацию, и сам являясь
DOM Element'ом может читаться по средствам отдельных классов ридеров как с xml'я так и c ejb сервера. Так как он Element
его очень просто перевести в xml.
Наследовать его от ElementNode было решено потому как, мне было банально лень определять в своём класе весь org.w3c.Element.
Вобще мне кажеться довольно логичным для работы с DOM деревом использовать кастомный Element =\\
T>Может стоит JAXB воспользоваться или аналогом каким XmlBeans там, еще что-нибудь...
С xml'ем раньше дела вобше так близко не имел.
JAXB на сколько я понял он считывает весь xml документ, который может быть довольно большим,
предствляя его как DOM дерево, елементов.
По XmlBeans я пробежалься довольно бегло, и разницы между ним и jaxb не заметил.
Кроме того им обоим нужно описание xml схемы, или dtd. Очень не хочеться вникать мне и так
надо с xslt, xpath, xsl-fo разобраться...
В xml, у меня по сути содержиться массив из этих объектов, то есть мне не нужен сразу весь документ.
Хотелось бы работать через DOM только с одним (двумя, при сравнеии отчётов) объектами.
В качестве XmlReader для объекта собиралься использовать Apache Digester по целям близок к JAXB но не требует
описания xml схемы.
Основня проблема в том как совместить SAX парсер с DOM моделью.
Чтобы обрабатывать DOM'ом лишь части документа. С этого и начанал поиск.
И досих пор так ответа и не нашол, вероятно придёться руками писать какой-то sax парсер.
Или вобше парсить руками.
Вот как-то так, простите что сбивчево и неграмотно
Ни что в жизни ни даёться так просто как... хотелось бы...
Здравствуйте, frёёm, Вы писали:
ёё>Только не ясно, в среде то я приоритет поставил...и всё отлично
ёё>А как его задать для javac, или хотябы ant'а ?
Ну
тут тоже не рекомендуют пользоваться "встроенным" кримсоном.
Да и вообще всё, что на
org. лучше заменять на "внешние" библиотеки.
Предлагают сделать
это, то есть положить "правильный" вариант библиотеки в
$JAVA_HOME/lib/endorsed, что, насколько я понял, должно помогать в подобных случаях.
ёё>Основня проблема в том как совместить SAX парсер с DOM моделью.
ёё>Чтобы обрабатывать DOM'ом лишь части документа. С этого и начанал поиск.
ёё>И досих пор так ответа и не нашол, вероятно придёться руками писать какой-то sax парсер.
ёё>Или вобше парсить руками.
Хорошая задача.
Тут пишут, что
While SAX is traditionally considered the fastest and slimmest API for XML, it does not have the ability to output XML (or anything else, for that matter). In fact, if you examine the SAX package (org.xml.sax), you won't find a single output method. It is designed from the ground up to read XML, rather than write it.
Note: It is possible to modify incoming XML by using an XMLFilter. (I'll talk a lot more about filters later in this tip and in future tips.) However, this is still not outputting XML. It's also possible to use raw I/O streams within SAX callbacks to output XML -- but that's really just a variant of option 5 in the list above, so I'll deal with it in Raw I/O streams.
То есть, похоже, что значительно проще руками выдернуть из потока нужный кусок хмл-я и подсунуть его дом-у.
Здравствуйте, Sergey_Timashev, Вы писали:
S_T>То есть, похоже, что значительно проще руками выдернуть из потока нужный кусок хмл-я и подсунуть его дом-у.
Кстати вот только подсказали что вроде бы
dom4j как раз таки это умеет...
Ни что в жизни ни даёться так просто как... хотелось бы...
Здравствуйте, frёёm, Вы писали:
ёё>Кстати вот только подсказали что вроде бы dom4j как раз таки это умеет...
Крута!_) Ну я по возможности стараюсь им и пользоваться, если нет специфичесих требований.
Hello, !
You wrote on Sat, 23 Dec 2006 11:13:14 GMT:
f> Основня проблема в том как совместить SAX парсер с DOM моделью.
f> Чтобы обрабатывать DOM'ом лишь части документа. С этого и начанал
f> поиск.
f> И досих пор так ответа и не нашол, вероятно придёться руками
f> писать какой-то sax парсер.
f> Или вобше парсить руками.
Ну я писал уже про dom4j.
Потом, к примеру апачевский Xerces полное DOM-дерево не строит, а создает узлы по мере обращения к ним. Назвается это deferred DOM —
http://xerces.apache.org/xerces2-j/faq-performance.htmlPosted via RSDN NNTP Server 2.0