Как уже отмечалось, ClassCastException
, вероятно, не добавляется в setAttribute
. Проверьте номер строки в стеке. Я предполагаю, что getFirstChild()
возвращает DocumentType
, а не Element
.
Попробуйте это:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(f);
Element e = (Element) doc.getDocumentElement().getFirstChild();
e.setAttribute("objectId", "OBJ123");
Обновление:
Кажется, вы путаете Node
и Element
. Element
- это реализация Node
, но, конечно, не единственная. Таким образом, не все Node
можно преобразовать в Element
. Если приведение работает на одной машине, а не на другой, это потому, что вы получаете что-то еще из getMapNode()
, потому что анализаторы ведут себя по-разному. Синтаксический анализатор XML является подключаемым в Java 1.4, поэтому вы можете получить совершенно другую реализацию от другого поставщика, даже с разными ошибками.
Поскольку вы не публикуете getMapNode()
, мы не можем видеть, что он делает, но вы должны четко указать, какой узел вы хотите, чтобы он возвращал (используя getElementsByTagName
или иным образом).