Пространства имен JAXP XPathFactory

1

Я пытаюсь извлечь один node из документа xml в android (java).

<?xml version="1.0" encoding="utf-8" ?>
<config:Manifest xmlns:config="http://leaflabs.com/manifest.config.xsd"> 
  <config:Text config:name="siteowner" config:desc="Site owner" config:transform="title"/>
  <config:Text config:name="siteowner1" config:desc="Site owner" config:transform="title"/>
</config:Manifest>

XPATH

config:Manifest/config:Text[@config:name='siteowner']

Я использую JAXP XPathFactory. Проблема, которую я получаю, всегда возвращается к нулю.

Я убедился, что мой xpath был правильно удостоверился, что мой конструктор документов NamespaceAware установлен в true, и я даже выполнил Пример (внизу страницы), которые реализуют NamespaceContext, но я все равно ничего не получаю.

Я посмотрел на postoverflow Post, но никто не ответил парню Ссылка

Что я делаю неправильно

  • 1
    Ваше относительное выражение XPath в порядке, если контекстный узел является корнем документа. Вы также можете использовать это абсолютное выражение: /config:Manifest/config:Text[@config:name='siteowner' . Если это приводит к пустому набору узлов, проверьте правильность привязки URI пространства имен.
  • 0
    Yip манифест является root спасибо
Теги:
xpath

2 ответа

4
Лучший ответ

Проблема в вашем коде factory не является пространством имен. Существует еще один поток, который разрешает эту проблему, Как использовать XPath для XML-документов, имеющих пространство имен по умолчанию

Предложите вам попробовать что-то вроде этого,

XPath xPath =. XPathFactory.newInstance() newXPath(); xPath.setNamespaceContext(новый MyNamespaceContext());

0

Не уверен на 100%, но я считаю, что вам нужен токен перед вами xpath:

Я бы попробовал следующее:

$this-/конфигурации: Manifest/конфигурации: Текст [@config: name= 'владельцы сайтов']

И если это не работает, попробуйте это:

/конфигурация: манифест/конфигурация: Текст [@config: name= 'владельцы сайты']

И если ни одна из этих работ не попробует это:

//конфиг: Manifest/конфигурации: Текст [@config: name= 'владельцы сайтов']

  • 0
    Здравствуй. Пробовал варианты и тот же результат. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню