Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XPath и : 
:(
    Опции темы
seth
Дата 4.5.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

Репутация: нет
Всего: 1



Есть такой код
Код

 public static void main(String[] args) {
        XPath xpath= XPathFactory.newInstance().newXPath();
        InputSource inputSource= null;
        try {
            inputSource = new InputSource(new FileInputStream("testcim.xml"));
            String expression="/*/cim:Terminal";
            DTMNodeList nodes =  (DTMNodeList)xpath.evaluate(expression, inputSource, XPathConstants.NODESET);
            int length = nodes.getLength();            
            System.out.println(nodes.getLength());
        } catch (Exception e) {
            System.out.println(e);
        }

    }


и XML 

Код

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cim="http://iec.ch/TC57/2006/CIM-schema-cim10#">
<cim:Terminal rdf:ID="TERM-BBS-1-10" > 
   <cim:IdentifiedObject.name>TERM-BBS-1-10</cim:IdentifiedObject.name> 
   <cim:IdentifiedObject.description>BusBarSection</cim:IdentifiedObject.description> 
   <cim:Terminal.ConnectivityNode rdf:resource="#CO-NEPOOLDV-EASTST-DOUGLASKV-138ND-402"/>  
   <cim:Terminal.ConductingEquipment rdf:resource="#CO-NEPOOLDV-EASTST-DOUGLASKV-138BBS-402"/>  
</cim:Terminal> 
</rdf:RDF>

Почему же он не находит этот узел? :(


--------------------
PM MAIL   Вверх
Шмель
Дата 4.5.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.4.2004

Репутация: 3
Всего: 18



Цитата
Почему же он не находит этот узел?

Потому что префиксы (такие, как rdf или cim) нужно зарегистрировать в конексте xpath с помощью метода setNamespaceContext(NamespaceContext nsContext). В твою задачу входит реализовать интерфейс java.xml.namespace.NamespaceContext и передать инстанс контекста в xpath. Он простой, как палка - там всего три метода.
Код

public class XPathTest {

    public static void main(String[] args) {
        XPath xpath = XPathFactory.newInstance().newXPath();
        xpath.setNamespaceContext(new MyNSContext()); // тут регистрируем контекст
        InputSource inputSource = null;
        try {
            inputSource = new InputSource(new FileInputStream("testcim.xml"));
            String expression = "/*/cim:Terminal";
            NodeList nodes = (NodeList) xpath.evaluate(expression, inputSource,    XPathConstants.NODESET);
            int length = nodes.getLength();
            
            System.out.println(nodes.getLength());
        } catch (Exception e) {
            System.out.println(e);
        }
    }
    
    public static class MyNSContext implements NamespaceContext {
        private org.apache.commons.collections.BidiMap ns; 
        public MyNSContext() {
            ns = new TreeBidiMap();
            ns.put("cim", "http://iec.ch/TC57/2006/CIM-schema-cim10#");
            ns.put("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
        }
        public String getNamespaceURI(String prefix) {
            return (String) ns.get(prefix);
        }
        public String getPrefix(String namespaceURI) {
            return (String) ns.getKey(namespaceURI);
        }
        public Iterator getPrefixes(String namespaceURI) {
            return ns.keySet().iterator();
        }
    }
}


Вообще, всё это есть в документации.
--------------------
будешь на Земле - заходи
PM MAIL ICQ   Вверх
seth
Дата 5.5.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

Репутация: нет
Всего: 1



Ох  спасибо - столь подробный ответ - риспкт!


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.