2016-12-16 12 views
0

Я пытаюсь запустить XML-файл с помощью скрипта Pig на Azure. Я столкнулся с проблемами, которые, по моему мнению, могут быть связаны с тем, что мой родительский узел имеет пространство имен.Использование XPathAll в Pig, когда родительский узел имеет пространство имен

REGISTER 'piggybank-0.15.0.jar'; 
DEFINE XPathAll org.apache.pig.piggybank.evaluation.xml.XPathAll(); 
A = LOAD 'file.xml' using org.apache.pig.piggybank.storage.XMLLoader('Parent') as (x:chararray); 
B = FOREACH A GENERATE XPathAll(x, 'Parent/Child', true, true); 
DUMP B; 

Скрипт работает без ошибок, но возвращает пустой результат:(). Должен ли я вызывать XMLLoader по-разному из-за пространства имен?

ответ

0

Обычно, вам нужно объявить префикс, скажем ns, ссылки на пространство имен по умолчанию URI, а затем использовать этот префикс для ссылки на элемент в пространстве имен по умолчанию:

ns:Parent/ns:Child 

Я не использую Свинью так дону Не знаю, поддерживает ли это объявление префикса. Чистый XPath подход будет соответствующим элемент комбинацией локального имени- и имен-Uri (оболочка для удобства чтения):

*[local-name()='Parent' and namespace-uri()='default ns URI here'] 
/*[local-name()='Child' and namespace-uri()='default ns URI here'] 

Если нет другого элемента с тем же именем в другом пространстве имен, то вы может упростить XPath путем снятия namespace-uri критериев:

*[local-name()='Parent']/*[local-name()='Child'] 

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

  • Нет связанных вопросов^_^