Пространство имен XML по умолчанию, JDOM и XPath

13
задан Michael 12 February 2009 в 20:17
поделиться

2 ответа

XPath 1.0 не поддерживает понятие пространства имен по умолчанию (, XPath 2.0 делает). Любой неснабженный префиксом тег, как всегда предполагается, является частью пространства имен без имен.

При использовании XPath 1.0 Вам нужно что-то вроде этого:

public static void main(String args[]) throws Exception {
    SAXBuilder builder = new SAXBuilder();
    Document d = builder.build("xpath.xml");
    XPath xpath = XPath.newInstance("x:collection/x:dvd");
    xpath.addNamespace("x", d.getRootElement().getNamespaceURI());
    System.out.println(xpath.selectNodes(d));
}
26
ответ дан Verhagen 13 February 2009 в 06:17
поделиться
  • 1
    @Larry: если Вы смотрите на мой ответ, я действительно говорил точно это. – Jerry Coffin 9 March 2010 в 01:52

У меня была подобная проблема, но мой был то, что у меня была смесь исходных данных XML, некоторым из которых определили пространство имен и других, которые не сделали. Для упрощения моей проблемы, я выполнил следующий отрывок JDOM после загрузки документа.

for (Element el : doc.getRootElement().getDescendants(new ElementFilter())) {
    if (el.getNamespace() != null) el.setNamespace(null);
}

После удаления всех пространств имен я смог использовать простой getChild ("elname") навигация стиля или простые запросы XPath.

я не рекомендовал бы эту технику как общее решение, но в моем случае это было определенно полезно.

7
ответ дан Peter Mortensen 13 February 2009 в 06:17
поделиться
  • 1
    Той логикой можно сказать наивный " hashtable" решение является правильным тем, что Вы просто устанавливаете хеш-таблицу в постоянном, но огромном, размере. – Larry 9 March 2010 в 01:44
Другие вопросы по тегам:

Похожие вопросы: