我需要你的帮助才能从根到叶子的所有(完整)路径列表下面的XML中获取。
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp">
<div ng-controller= "myController">
<div ng-repeat="c in usermsg">
<div>{{c.name}}</div>
</div>
<button ng-click="send()">Click to send</button>
</div>
</body>
我想要类似的:
<List>
<V ID="1">
<F>
<N>10</N>
<M>10</M>
<A>
<IDX>19</IDX>
</A>
</F>
<F>
<N>20</N>
<M>20</M>
<A>
<IDX>21</IDX>
</A>
</F>
</V>
<V ID="2">
<F>
<N>100</N>
<M>100</M>
<A>
<IDX>50</IDX>
</A>
</F>
<F>
<N>21</N>
<M>120</M>
<A>
<IDX>33</IDX>
</A>
</F>
</V>
<V ID="3">
<F>
<N>200</N>
<M>300</M>
<A>
<IDX>99</IDX>
</A>
</F>
<F>
<N>44</N>
<M>55</M>
<A>
<IDX>64</IDX>
</A>
</F>
</V>
</List>
使用以下PHP代码我没有得到我需要的东西,我错在哪里?有人能说些什么?
<V ID="1"><F><N>10</N><M>10</M><A><IDX>19</IDX>
<V ID="1"><F><N>20</N><M>20</M><A><IDX>21</IDX>
<V ID="2"><F><N>100</N><M>100</M><A><IDX>50</IDX>
<V ID="2"><F><N>21</N><M>120</M><A><IDX>33</IDX>
<V ID="3"><F><N>200</N><M>300</M><A><IDX>99</IDX>
<V ID="3"><F><N>44</N><M>55</M><A><IDX>64</IDX>
非常感谢 麦酒
答案 0 :(得分:0)
首先,您应该简化当前的Xpath表达式。表达式开头的斜杠使它们使用文档本身作为上下文,而不是当前节点。您可以只使用标记名称来缩小它们:
$test1 = new SimpleXMLElement($testq);
foreach ($test1->xpath('V') as $valueV) {
echo $valueV["ID"]." - ";
foreach ($valueV->xpath('F') as $valueF) {
echo $valueF->N." - ";
echo $valueF->M." - ";
foreach ($valueF->xpath('A') as $valueA) {
echo $valueA->IDX." - <BR>";
}
}
}
这使用了一些Xpath默认值。像“V&#39; V&#39;是孩子:: V&#39;。 child
是轴。以下是其他轴,其中两个很有意思:descendant
(简//
)和ancestor
。
首先让我们迭代文档中的所有A
个节点。
foreach ($test1->xpath('.//A') as $valueA) {
echo $valueA->IDX." - <BR>";
}
现在,对于每个节点,您都会获取祖先,迭代它们并根据节点输出数据。
foreach ($test1->xpath('.//A') as $valueA) {
foreach ($valueA->xpath('ancestor::*') as $ancestor) {
// change that to handle the different ancestor nodes
echo $ancestor->getName(), ' - ';
}
echo $valueA->IDX, "\n";
}