我无法在XPath中找到正确的道路

时间:2012-03-27 08:33:13

标签: php xml xpath

有人知道正确的命令/路径来获取 ident shortTitle 还有一个字符串,以“ / ”开头(请注意,在某些情况下,该字符串的位置可能会发生变化)

我有这段代码,我提出字符串,但后来我没有 ident shortTitle


$result = $xpaths->xpath("//*[ident = '$page']/moduleConfiguration/config//string[starts-with(.,'/')]");
foreach ($result as $item) {

echo item

 };

完整路径是

/org.olat.course.Structure/rootNode/children/*[type = 'st' or type = 'sp' or type = 'bc']/moduleConfiguration/config/entry/string

....
<org.olat.course.nodes.STCourseNode>
   <ident>81473730700165</ident>
   <parent class="org.olat.course.nodes.STCourseNode" reference="../../.."/>
   <type>st</type>
   <shortTitle>General Information</shortTitle>
   <longTitle/>
   <learningObjectives/>
   <displayOption>content</displayOption>

   <moduleConfiguration>
      <config>
         <entry>
            <string>allowRelativeLinks</string>
            <string>false</string>
         </entry>
         <entry>
            <string>file</string>
            <string>/kgalgemeneinformatie.html</string>           <---
         </entry>
         <entry>
            <string>configversion</string>
            <int>3</int>
         </entry>
         <entry>
            <string>display</string>
            <string>file</string>
         </entry>
      </config>
   </moduleConfiguration>

 <noAccessExplanation></noAccessExplanation>
 <preConditionVisibility></preConditionVisibility>
 <preConditionAccess></preConditionAccess>
 <scoreCalculator></scoreCalculator>
</org.olat.course.nodes.STCourseNode>
...
如果这可以在1个foreach中工作,那将是非常好的。

亲切的问候

迪特

1 个答案:

答案 0 :(得分:1)

如果您希望将它们作为一个循环中的节点,则必须将它们与“|”组合在一起标识符

//*[ident = '$page']/moduleConfiguration/config//string[starts-with(.,'/')]|//*[ident = '$page']/shortTitle|//*[ident = '$page']/ident

或者您可以使用连接函数将它们全部分组到一个节点中:

concat(//*[ident = '$page']/moduleConfiguration/config//string[starts-with(.,'/')], //*[ident = '$page']/shortTitle, //*[ident = '$page']/ident)