xpath在登记菜单

时间:2015-08-24 13:12:24

标签: xml xpath

大家好!我不太擅长xpathing,但创建了这种xml结构:

<Pages>          <!--This is the root node-->

    <Home>
        <description>This is my site</description>  
        <url>views/home/home.php</url>   
        <menu>
            <item>Help</item>
            <item>About</item>
            <item>Contact</item>
        </menu>
    </Home>

    <Help>             <!--i need to select this if its listed in Home/menu/item above-->  
          ...
             some stuffy child nodes
          ...
    </Help> 

    <About>            <!--And Or select this if its listed in Home/menu/item above-->
          ...
             some stuffy child nodes
          ...
    </About>

    <Contact>          <!--And Or select this if its listed in Home/menu/item above-->
          ...
             some stuffy child nodes
          ...
    </Contact>

</Pages>

我一直在用一个选择Home的xpath表达式消亡 (不包括其菜单子项;如果可能)和任何其他页面 (如关于和/或联系),在主页/菜单/ *中列出;那是, 在Home的菜单中招募(逐项列出)Home的任何兄弟姐妹。 目前,这是我能想到的:

$SimpleObj = new XMLManager('thefile.xml')  //my custom class that creates and manages xml DOM 

$SimpleObj->Xpath("Pages/*[name() = 'Home' and ./name() != 'menu'] | Pages/*[name() = ./menu/item[./text()] ] ");

上述表达证明是不礼貌的。我犯了什么罪?还是我要求一些不可能的东西? 任何指南都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

一个可能的XPath:

/Pages/*[self::Home or name()=preceding-sibling::Home/menu/item]

上面的XPath选择Pages的所有子元素(如果它是<Home>元素*,或者它是一个名称等于Home/menu/item元素值之一的元素。

*)您不能使用XPath从父元素中排除任何元素,因为Home元素及其内容是一个单元。 XPath按原样返回源XML的单元。