Php xmlreader子节点值

Php xmlreader子节点值,php,xmlreader,Php,Xmlreader,你好,我有这个xml: <pola_wlasne> <pole> <nazwa><![CDATA[STAN 1]]></nazwa> <wartosc><![CDATA[5.33]]></wartosc> </pole> <pole> <nazwa><![CDATA[Gatunek]]></nazwa>

你好,我有这个xml:

<pola_wlasne>
  <pole>
    <nazwa><![CDATA[STAN 1]]></nazwa>
    <wartosc><![CDATA[5.33]]></wartosc>
  </pole>
  <pole>
    <nazwa><![CDATA[Gatunek]]></nazwa>
    <wartosc><![CDATA[I]]></wartosc>
  </pole>
  <pole>
    <nazwa><![CDATA[pal]]></nazwa>
    <wartosc><![CDATA[65,0900]]></wartosc>
  </pole>
  <pole>
    <nazwa><![CDATA[op.]]></nazwa>
    <wartosc><![CDATA[1,4150]]></wartosc> // <- how to read only this value?
  </pole>
</pola_wlasne>

//值==“op.”){
$reader->next('wartosc');
}
(..)
“瓦托斯”案:

$reader->value;// XMLReader有点复杂,您必须遍历所有XML,并在读取下一个节点时设置适当的标志。此外,您还有CDATA区域,因此您需要检查它的值读数是否正确

代码:

所以它的返回值是正确的:14150值


也许有一种更简单的方法可以做到这一点,我对XMLReader不太熟悉,在大多数情况下使用SimpleXML。

XMLReader有点复杂,您必须遍历所有XML,并在读取下一个节点时设置适当的标志。此外,您还有CDATA区域,因此您需要检查它的值读数是否正确

代码:

所以它的返回值是正确的:14150值


也许有一种更简单的方法可以做到这一点,我对XMLReader并不十分熟悉,它在大多数情况下都使用SimpleXML。

@matterix很高兴为您提供帮助,pozdrawiam;)@matterix很乐意帮忙,pozdrawiam;)
if ($reader->value == 'op.'){
              $reader->next('wartosc');
            }
(..)
case 'wartosc':
$reader->value; // <-- read all elements
break;
$wartosc = 0; // flags
$nazwa = 0;
while ($xml->read()) {
   if($wartosc && $xml->nodeType == XMLReader::CDATA){ 
   // if we are in proper 'wartosc' node, and it's CDATA section
        echo $xml->value;   // read value
        break;  // end reading
   }

   if($xml->name == 'nazwa'){ // if we are in node 'nazwa'
        $nazwa = 1; // set flag for reading next CDATA
   }

   if($nazwa && $xml->nodeType == XMLReader::CDATA){ 
   // if we are in 'nazwa' node, and it's CDATA section
        if($xml->value == 'op.'){   // .. and it's have 'op.' value
            $wartosc = 1; // set flag for reading next 'wartosc' node value
        } else {
            $xml->next('pole'); // otherwise, skip to next 'pole' node
        }
   }
}