Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Записать разные namespace у аттрибутов элемента


Автор: Vasan 27.11.2008, 16:07
Привет всем! Не могу разобраться, как, используя JDOM, при создании элемента к двум разным аттрибутам этого элемента "привязать" разные namespace? Т.е. в итоге мне надо получить следующее:

Код

<Font ss:FontName="Arial Cyr" x:CharSet="204" ss:Size="12" ss:Bold="1"/>


Элемент создаю следующим образом (ss определил заранее как строку):
Код

Element Font = new Element("Font",ss);
root.addContent(Font);


Но такой способ для этого случая не годиться :(

Подскажите пожалуйста как можно такое сотворить?

Автор: sir_nuf_nuf 27.11.2008, 17:55
Vasan, да так и делать.
Создавайте объекты аттрибутов с нужными неймспейсами, добавляйте их к вашему элементу и вперед:
Код

Element font = new Element("Font",ss);
Attribute a1 = new Attribute("FontName", namespace1);
font.addContent(a1);
Attribute a2 = new Attribute("FontName", namespace2);
font.addContent(a2);
root.addContent(font);

Автор: Vasan 27.11.2008, 18:08
2sir_nuf_nuf
Большое спасибо! Помогло!

Правда сделал вот так:
Код

Attribute FontName = new Attribute("FontName",ss);
Font.setAttribute(FontName);
Attribute CharSet = new Attribute("CharSet",x);
Font.setAttribute(CharSet);


Добавлено через 14 минут и 38 секунд
Ой... что-то я запутался совсем, да и ослеп)

Совсем всё не так.  Код
Код

Attribute FontName = new Attribute("FontName",ss);
Font.addContent(FontName);

возвращает ошибку: "The method addContent(String) in the type Element is not applicable for the arguments (Attribute)".

А тот код, который от радости привёл я, он вообще устанавливает value аттрибута:

Код

<Font FontName="mynamespacedeclaration1" CharSet="mynamespacedeclaration2" /> 


В общем, совсем ничего не получается...

Автор: sir_nuf_nuf 27.11.2008, 19:10
Vasan, я вообще не работал с JDOM. сейчас читаю javadoc.
По идее (точнее по спецификации DOM) - за создание аттрибутов должен отвечать метод createAttribute объекта document.

Надо просто выяснить как создавать аттрибуты в JDOM.

-----------------------

мда.. JDOM - кривое API.
нужно использовать метод setAttribute:
Код

Namespace ns1 = Namespace.getNamespace("namespace string here");
Attribute a = new Attribute("name of attr", "value of attr", ns1);
elem.setAttribute(a);

Автор: Vasan 27.11.2008, 22:48
2sir_nuf_nuf
Согласен, что JDOM - кривое апи. Некоторые другие парсеры более понятны. Если в JDOM разобраться, действительно меньше кода надо, о чем говорят даже на сайте разработчиков: http://www.servlets.com/speaking/jdom-javaone.pdf
Но разобраться проблема. Хотя.... "и не такую броню брали" smile

Автор: sir_nuf_nuf 27.11.2008, 22:56
Vasan, я не имел в виду, "сложное" или "неудобное".
Просто есть стандарт DOM, где сказано у каких объектов должны быть какие методы и что они должны делать.
Так вот:
создание аттрибута с помощью конструктора (как в JDOM),  а  не с помощью фабричного метода (как в стандарте) - это плохо.
ибо, программистам понадобится время, что бы освоить это

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)