2009-03-04 51 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的列表。例如,给定“Sub Menu”,我想回到Manual.pdf和UserGuide.pdf的两个Document节点。目前,我使用循环遍历子代的代码来提取这些信息,但是,我宁愿直接使用XPath将其拉起来,但我的技能很弱。

(你提问之前,我不能重组XML,它提供给我这样。)

有什么想法?

+0

你使用什么语言?必须为该语言编写一些解析器,以便您不必依赖RegEx – 2009-03-04 19:39:35

回答

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>/

请问超过可能的工作(有一点点的调整,这是一个有点粗糙! ),但是,我不认为正则表达式是要走的路。我个人使用XPath或DOM