XPath以查找嵌套值

时间:2009-03-04 19:33:30

标签: xml xpath

我有一些XML,我在使用XPath处理时遇到问题。我似乎无法获得我正在寻找的价值观。 XML的结构如下:

<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的两个Document节点。

目前,我正在使用遍历孩子的代码来提取这些信息,但是,我宁愿直接使用XPath来提取它,但我的技能很差。

(在你问之前,我无法重构XML。这是以这种方式提供给我的。)

有什么想法吗?

2 个答案:

答案 0 :(得分:9)

这是一个可以做你想做的XPath:

  

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

答案 1 :(得分:0)

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

更有可能工作(稍微调整一下,这有点粗糙!),但是,我不认为正则表达式是可行的。我个人使用XPath或DOM