2010-12-03 2 views
1

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

<?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. Проблема, которую я получаю, возвращает null каждый раз.

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

Я смотрел на StackOverflow сообщения, но никто не ответил парень Link

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

+1

Ваше ** относительное выражение ** XPath отлично до тех пор, пока контекстный узел является корнем документа. Вы также можете использовать это абсолютное выражение: `/ config: Manifest/config: Text [@config: name = 'siteowner']`. Если это результат в пустом наборе узлов, проверьте правильность привязки URI пространства имен. – 2010-12-03 15:22:18

+0

yip manifest is root спасибо – Pintac 2010-12-06 06:48:44

ответ

4

Проблема в вашем коде - это фабрика, которой не известно пространство имен. Существует еще одна нить, которая решает эту проблему, How to use XPath on xml docs having default namespace

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

XPath XPATH = XPathFactory.newInstance() newXPath(). xPath.setNamespaceContext (new MyNamespaceContext());

0

Не 100% уверены, но я считаю, что вам нужна фишка перед вами XPATH заявления:

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

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

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

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

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

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