大家好!我不太擅长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()] ] ");
上述表达证明是不礼貌的。我犯了什么罪?还是我要求一些不可能的东西? 任何指南都会非常感激。谢谢!
答案 0 :(得分:0)
一个可能的XPath:
/Pages/*[self::Home or name()=preceding-sibling::Home/menu/item]
上面的XPath选择Pages
的所有子元素(如果它是<Home>
元素*,或者它是一个名称等于Home/menu/item
元素值之一的元素。
*)您不能使用XPath从父元素中排除任何元素,因为Home
元素及其内容是一个单元。 XPath按原样返回源XML的单元。