Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php XPath不适用于XMLReader和SimpleXML?_Php_Xml_Xpath_Simplexml_Xmlreader - Fatal编程技术网

Php XPath不适用于XMLReader和SimpleXML?

Php XPath不适用于XMLReader和SimpleXML?,php,xml,xpath,simplexml,xmlreader,Php,Xml,Xpath,Simplexml,Xmlreader,我从一个xml feeder获取提要,他的xml结构如下: <XMLSOCCER.COM> <OddsList> <Odds> <FixtureMatch_Id>346076</FixtureMatch_Id> <Bookmaker>Bet-At-Home</Bookmaker> <UpdatedDate>2015-06-20T19:42:32.943</UpdatedDate>

我从一个xml feeder获取提要,他的xml结构如下:

<XMLSOCCER.COM>
<OddsList>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Bet-At-Home</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:32.943</UpdatedDate>
  <Type>Over/Under 2.5</Type>
  <HomeOdds>2.22</HomeOdds>
  <AwayOdds>1.58</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Interwetten</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:33.113</UpdatedDate>
  <Type>Over/Under 2.5</Type>
  <HomeOdds>1.85</HomeOdds>
  <AwayOdds>1.75</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>188Bet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:33.27</UpdatedDate>
  <Type>Over/Under 2.5</Type>
  <HomeOdds>2.11</HomeOdds>
  <AwayOdds>1.8</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Pinnacle</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:32.803</UpdatedDate>
  <Type>Over/Under 2.5</Type>
  <HomeOdds>2.33</HomeOdds>
  <AwayOdds>1.65</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Bet365</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.263</UpdatedDate>
  <Type>Handicap</Type>
  <HomeOdds>3.1</HomeOdds>
  <DrawOdds>3.5</DrawOdds>
  <AwayOdds>2</AwayOdds>
  <Handicap>-1</Handicap>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Bet-At-Home</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.373</UpdatedDate>
  <Type>Handicap</Type>
  <HomeOdds>1.17</HomeOdds>
  <DrawOdds>5.41</DrawOdds>
  <AwayOdds>10.32</AwayOdds>
  <Handicap>1</Handicap>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Mybet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.5</UpdatedDate>
  <Type>Handicap</Type>
  <HomeOdds>3.35</HomeOdds>
  <DrawOdds>3.5</DrawOdds>
  <AwayOdds>1.85</AwayOdds>
  <Handicap>-1</Handicap>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Expekt</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:33.41</UpdatedDate>
  <Type>Double Chance</Type>
  <HomeOdds>1.15</HomeOdds>
  <DrawOdds>1.85</DrawOdds>
  <AwayOdds>1.3</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Bet-At-Home</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:33.787</UpdatedDate>
  <Type>Double Chance</Type>
  <HomeOdds>1.17</HomeOdds>
  <DrawOdds>1.8</DrawOdds>
  <AwayOdds>1.25</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Mybet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.037</UpdatedDate>
  <Type>Double Chance</Type>
  <HomeOdds>1.15</HomeOdds>
  <DrawOdds>1.85</DrawOdds>
  <AwayOdds>1.25</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>BetClic</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.16</UpdatedDate>
  <Type>Double Chance</Type>
  <HomeOdds>1.15</HomeOdds>
  <DrawOdds>1.85</DrawOdds>
  <AwayOdds>1.3</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Unibet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:33.52</UpdatedDate>
  <Type>Double Chance</Type>
  <HomeOdds>1.22</HomeOdds>
  <DrawOdds>1.84</DrawOdds>
  <AwayOdds>1.29</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>888</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:33.647</UpdatedDate>
  <Type>Double Chance</Type>
  <HomeOdds>1.22</HomeOdds>
  <DrawOdds>1.84</DrawOdds>
  <AwayOdds>1.29</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Pinnacle</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.733</UpdatedDate>
  <Type>Asian Handicap</Type>
  <HomeOdds>1.92</HomeOdds>
  <AwayOdds>2</AwayOdds>
  <Handicap>-0.5</Handicap>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>WilliamHill</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.623</UpdatedDate>
  <Type>Asian Handicap</Type>
  <HomeOdds>1.36</HomeOdds>
  <AwayOdds>3</AwayOdds>
  <Handicap>0</Handicap>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Betfred</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.86</UpdatedDate>
  <Type>Asian Handicap</Type>
  <HomeOdds>1.36</HomeOdds>
  <AwayOdds>3</AwayOdds>
  <Handicap>0</Handicap>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>188Bet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:34.967</UpdatedDate>
  <Type>Asian Handicap</Type>
  <HomeOdds>1.89</HomeOdds>
  <AwayOdds>2.03</AwayOdds>
  <Handicap>-0.5</Handicap>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Doxxbet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:31.63</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.85</HomeOdds>
  <DrawOdds>3.3</DrawOdds>
  <AwayOdds>3.92</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>BetSafe</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.74</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.84</HomeOdds>
  <DrawOdds>3.25</DrawOdds>
  <AwayOdds>4.25</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Pinnacle</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.257</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.92</HomeOdds>
  <DrawOdds>3.4</DrawOdds>
  <AwayOdds>4.8</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>888</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:31.02</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.9</HomeOdds>
  <DrawOdds>3.4</DrawOdds>
  <AwayOdds>4</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Skybet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:32.177</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.91</HomeOdds>
  <DrawOdds>3.4</DrawOdds>
  <AwayOdds>4</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>WilliamHill</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:29.91</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.91</HomeOdds>
  <DrawOdds>3.3</DrawOdds>
  <AwayOdds>4.33</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Bet365</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.02</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.83</HomeOdds>
  <DrawOdds>3.4</DrawOdds>
  <AwayOdds>4.5</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Expekt</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.13</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.82</HomeOdds>
  <DrawOdds>3.1</DrawOdds>
  <AwayOdds>4.6</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Betfred</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.473</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.83</HomeOdds>
  <DrawOdds>3.3</DrawOdds>
  <AwayOdds>4.33</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Bet-At-Home</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:31.13</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.82</HomeOdds>
  <DrawOdds>3.18</DrawOdds>
  <AwayOdds>4.25</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Interwetten</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:31.397</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.8</HomeOdds>
  <DrawOdds>3.4</DrawOdds>
  <AwayOdds>4</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>BWin</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:31.77</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.85</HomeOdds>
  <DrawOdds>3.3</DrawOdds>
  <AwayOdds>3.9</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Mybet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:31.943</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.85</HomeOdds>
  <DrawOdds>3.3</DrawOdds>
  <AwayOdds>4</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>BetClic</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:32.067</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.82</HomeOdds>
  <DrawOdds>3.1</DrawOdds>
  <AwayOdds>4.6</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>188Bet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:32.27</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.86</HomeOdds>
  <DrawOdds>3.15</DrawOdds>
  <AwayOdds>4.05</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>10Bet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:32.473</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.83</HomeOdds>
  <DrawOdds>3.2</DrawOdds>
  <AwayOdds>4.4</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Sportingbet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:32.707</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.83</HomeOdds>
  <DrawOdds>3.25</DrawOdds>
  <AwayOdds>4.33</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>NordicBet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.63</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.84</HomeOdds>
  <DrawOdds>3.25</DrawOdds>
  <AwayOdds>4.25</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Ladbrokes</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.85</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.85</HomeOdds>
  <DrawOdds>3.1</DrawOdds>
  <AwayOdds>4.25</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>Unibet</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:30.38</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.9</HomeOdds>
  <DrawOdds>3.4</DrawOdds>
  <AwayOdds>4</AwayOdds>
</Odds>
<Odds>
  <FixtureMatch_Id>346076</FixtureMatch_Id>
  <Bookmaker>5Dimes</Bookmaker>
  <UpdatedDate>2015-06-20T19:42:31.507</UpdatedDate>
  <Type>1X2</Type>
  <HomeOdds>1.92</HomeOdds>
  <DrawOdds>3.4</DrawOdds>
  <AwayOdds>4.8</AwayOdds>
</Odds>
</OddsList>
但是var_dump让我失望了

数组(大小=0)空数组(大小=0)空数组(大小=0)空 数组(大小=0)为空


我需要使用XMLReader,因为我只需要从xpath获取条件,而不是整个文档

你的while似乎一次也没有执行过。应读取代码,直到出现所需条件

 while($reader->read()) {
   if (reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'XMLSOCCER.COM') ) {
        $xml = simplexml_import_dom($dom->importNode($reader->expand(),true));
        $pathXML = $xml->xpath('//Odds[contains(Bookmaker,"Interwetten")]');
        /*if($this->getExpression()){
            $xml->xpath($this->getExpression());
        }*/
        break;
    }
}

您不需要
XMLReader
来计算XPath。请看,是的,我需要,因为我只想获取提要的一部分,而不是整个文档。SimpleXML的搜索速度很慢。这个提要有20000个元素。显示$xmlOh的内容是的,现在就可以了!谢谢很乐意帮忙。祝你好运请回答一个问题。这段代码是否将刚刚搜索过的提要加载到内存中,或者像SimpleXML一样将整个文档从他的内存返回给我搜索,因为这段代码需要像整个文档加载一样的时间……不幸的是,我没有使用xnlreader,但我想您需要使用metod来扩展只找到的节点,或者保存扫描xml的片段,直到xmlsocket.com的close元素。这个答案最终没有提供答案(甚至被接受),因为它只导致了下一个问题:(仅供参考)
 while($reader->read()) {
   if (reader->nodeType == XMLREADER::ELEMENT && $reader->name == 'XMLSOCCER.COM') ) {
        $xml = simplexml_import_dom($dom->importNode($reader->expand(),true));
        $pathXML = $xml->xpath('//Odds[contains(Bookmaker,"Interwetten")]');
        /*if($this->getExpression()){
            $xml->xpath($this->getExpression());
        }*/
        break;
    }
}