2009-03-04 3 views
0

У меня есть XML. У меня проблема с обработкой XPath. Кажется, я не могу получить ценности, которые я ищу. XML структурирована следующим образом:XPath, чтобы найти вложенные значения

<Group> 
    <Menu> 
     <Name>Top Menu</Name> 
     <Document> 
     <DocName>Readme.txt</DocName> 
     </Document> 
     <Menu> 
     <Name>Sub Menu</Name> 
     <Document> 
      <DocName>Manual.pdf</DocName> 
     </Document> 
     <Document> 
      <DocName>UserGuide.pdf</DocName> 
     </Document> 
     </Menu> 
    </Menu> 
</Group> 

Учитывая название меню, я хочу получить обратно список DocumentNodes в меню. Например, с учетом «Подменю», я хотел бы вернуть два Узла документа для Manual.pdf и UserGuide.pdf.

В настоящее время я извлекаю эту информацию с помощью кода, который проходит через дочерние элементы, но я бы скорее просто подтянул его напрямую с помощью XPath, но мои навыки с ним слабы.

(И прежде чем вы спросите, я не могу изменить структуру XML. Это при условии, мне этот путь.)

Любые мысли?

+0

На каком языке вы используете? Должен быть какой-то парсер, написанный на/для этого языка, чтобы вам не приходилось полагаться на RegEx. –

+0

Вы правы. Я хочу сказать XPath. Мозг пердеть! –

ответ

9

Вот XPath, который будет делать то, что вы хотите:

//Menu[Name='Sub Menu']/Document

0

/<Menu>[\w\n]*<Name>Sub Menu</Name>[\w\n]*<Document>[\w\n]*(<DocName>([a-ZA-Z0-9\.]+)</DocName>[\w\n]*)*</Menu>/

более чем вероятно работы (с небольшой настройки, это немного грубо!), но, я не думаю, что Regex - это путь. Я лично использовал XPath или DOM

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