【发布时间】:2014-01-05 21:51:19
【问题描述】:
我写了以下xpath:
//datas[child::node()//DataInfo/DataInfoItem[contains(@Value,'EA22')]]
适用于以下 XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<Customer Modified="false">
<datas>
<FireData>
<DataInfo>
<DataInfoItem Name="place" Value="g5688"/>
<DataInfoItem Name="number" Value="EA22"/>
<DataInfoItem Name="use" Value="ice"/>
</DataInfo>
<DataHistorics>
<DataHistoric HistoDate="2013-11-25T07:54:31" Type="0" visual="691.77"/>
<DataHistoric HistoDate="2013-12-02T07:23:29" Type="0" visual="618.65"/>
</DataHistorics>
<FireDataData Previous="106256.71"/>
</FireData>
</datas>
</Customer>
<Customer Modified="false">
<datas>
<FireData>
<DataInfo>
<DataInfoItem Name="place" Value="g5678"/>
<DataInfoItem Name="number" Value="GH44"/>
<DataInfoItem Name="use" Value="ice"/>
</DataInfo>
<DataHistorics>
<DataHistoric HistoDate="2013-11-25T07:54:31" Type="0" visual="691.77"/>
<DataHistoric HistoDate="2013-12-02T07:23:29" Type="0" visual="618.65"/>
</DataHistorics>
<FireDataData Previous="106256.71"/>
</FireData>
</datas>
</Customer>
我在网上尝试了几个 xpath 测试器(http://www.xpathtester.com/、http://xpath.online-toolz.com/tools/xpath-editor.php)和 Oxygen, 并且 xpath 一直在返回我正在寻找的内容:
<datas>
<FireData>
<DataInfo>
<DataInfoItem Name="place" Value="g5688"/>
<DataInfoItem Name="number" Value="EA22"/>
<DataInfoItem Name="use" Value="ice"/>
</DataInfo>
<DataHistorics>
<DataHistoric HistoDate="2013-11-25T07:54:31" Type="0" visual="691.77"/>
<DataHistoric HistoDate="2013-12-02T07:23:29" Type="0" visual="618.65"/>
</DataHistorics>
<FireDataData Previous="106256.71"/>
</FireData>
</datas>
但如果我在 php 中执行此操作,我将一无所获:
$xml = simplexml_load_file(test.xml);
$data = $xml->xpath("//datas[child::node()//DataInfo/DataInfoItem[contains(@Value,'EA22')]]");
var_dump($data)
我真的不明白,我在另一个讨论中读到 var_dump 不适合打印 xpath 查询的结果,但我尝试了很多东西,但我认为它不是来自那里。
有人可以帮帮我吗?
非常感谢!
【问题讨论】:
-
似乎可以使用普通 DOM 在 PHP 中找到:eval.in/86074
-
你的代码对我很好:eval.in/86076 - 错误可能不在 xpath 表达式中。