2009-11-23 3 views
3

Я пытаюсь записать документ graphML с XOM в java, но я не могу понять, как правильно получить все объявления пространства имен. Для того, чтобы иметь действительный GraphML, мне нужно иметь корневой элемент, который выглядит следующим образом:Написание GraphML с помощью XOM?

<graphml xmlns="http://graphml.graphdrawing.org/xmlns" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns 
    http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"> 

Я был в состоянии получить большинство из этого, делая

Element root = new Element("graphml"); 
root.setNamespaceURI("http://graphml.graphdrawing.org/xmlns"); 
root.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance"); 

Проблема является последним элементом этого тега, xsi:schemaLocation. Я не могу понять, как выразить это в XOM. Я не могу сделать это как обычный атрибут, так как это генерирует исключение (Attribute prefixes must be declared.) и делает это как дополнительное объявление пространства имен также приводит к исключению (NCNames cannot contain colons). Есть идеи?

ответ

3

Это должно быть сделано. В основном вы не указали URI пространства имен для атрибута xsi:schemaLocation. Таким образом, попытка создать атрибут prefixed без пространства имен, которое явно не сработает.

root.addAttribute(new Attribute("xsi:schemaLocation", 
    "http://www.w3.org/2001/XMLSchema-instance", 
    "http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd")); 

Проверьте здесь для правильного конструктора атрибутов

Attribute(String name, String URI, String value)

+0

Спасибо, это работает для осуществления проверки sitemaps.org. http://www.sitemaps.org/protocol.html – ronnyfm

Смежные вопросы