2013-12-13 6 views
0

Это немного новичок, но до сих пор я не смог найти ответ.Синтаксис синтаксиса XPath в чайнике 5.0.1

Я использую преобразование ввода «Получить данные из XML» в чайнике, и у меня возникли проблемы с пониманием синтаксиса для XPath.

Если посмотреть во всех образцах преобразований, похоже, что XPath указан довольно простым способом.

Если у меня есть файл XML, который имеет:

<A> 
<B> 
    <C att1='fruit' att2='banana'> 
    </C> 
    <C att1='vegetable' att2='lettuce'> 
    </C> 
</B> 
</A> 

И я хочу, чтобы получить att1 'плод', я просто введите следующее в поле XPath:

A/B/C/@att1 

Однако, чайник не будет принимать этот синтаксис. Он настаивает на написании XPath как:

*[name()='A']/*[name()='B']/*[name()='C']/@att1 

Это прекрасно. Однако, как только XPaths усложняются, например, когда я хочу использовать токены, я немного теряю их, как писать.

Скажите, теперь я хочу прочитать значение att2, но только если att1 является «растительным». Я бы написать это, с помощью маркера:

A/B/C[@att1='vegetable']/@att2 

Но как бы я пишу это в синтаксисе чайника?

Кроме того, не уверен, если это уместно, но я бегу чайник 5.0.1 на Windows 7.

Любая помощь будет принята с благодарностью!

+0

Могут ли быть проблемы пространства имен? I.e., есть ли декларация пространства имен в вашем документе? –

+0

Вот [информация об объявлении пространства имен] (https://en.wikipedia.org/wiki/XML_namespace#Namespace_declaration). Вы либо должны создать пространство имен по умолчанию для своих выражений XPath, либо префикс пространства имен, который вы должны использовать с шагами XPath, например 'ns: A/ns: B/ns: C/@ att1'. Тем не менее, я понятия не имею, что такое Kettle, поэтому я не могу вообще помочь с настройкой. Возможно [это] (http://forum.spring.io/forum/spring-projects/web-services/70155-namespace-problems#post529890) может дать вам подсказку. –

ответ

0

Если

A/B/C/@att1 

преобразуется в:

*[name()='A']/*[name()='B']/*[name()='C']/@att1 

затем

A/B/C[@att1='vegetable']/@att2 

должно быть:

*[name()='A']/*[name()='B']/*[name()='C' and @att1='vegetable']/@att2 

Однако это странное преобразование может быть связано с тем, как вы используете пространства имен.

Вы можете заменить name() с local-name() или рассмотреть

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