php中的XMl解析查询

伊万·拉哈纳尔(Ivan Laharnar)

我正在解析xml节点,但我做错了什么,但我不知道是什么。我有这个xml:

$xml="    <root>
        <info>
        <company/>
        <user_id>43</user_id>
        <currency>EUR</currency>
        </info>
        <products>
         <product>
          <id>1336</id>
          <pn>NX.RZNAA.003</pn>
          <stock>1.00</stock>
         </product>
         <product>
          <id>1337</id>
          <pn>NX.RZNAA.004</pn>
          <stock>4.00</stock>
          <item_number>5</item_number>
         </product>
        </products>
     </root>";

如您所见,我有两个带有子节点的“产品”节点。但是在第一个节点“ product”中,我的节点比第二个节点少一个。在第二个节点中添加“ item_number”节点(它是可选节点,如果它具有值,则在xml中,否则不存在)。当我解析此节点时,即使我在第一个节点上,我的解析器也会从第二个节点“产品”中返回值。

有人知道这是什么问题吗?

这是我的代码:

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml) ; 
$xpath = new DOMXPath($xmlDoc);
$tagForCount="count(//".$arrayPolja[0].")"; 
$x=$xmlDoc->getElementsByTagName("product");
$xpath = new DomXpath($xmlDoc);
$count = 3;
$arrayPolja[0] = "id";
$arrayPolja[1] = "pn";
$arrayPolja[2] = "stock";
$arrayPolja[3] = "item_number";
$r=0;
foreach ($x as $product) {
     $i=0;
     while ($i<=$count)
     {
        $polje=$arrayPolja[$i];
        $values[$i]=$xpath->query($polje, $product)->item($r)->textContent;     
        $i++;
     }
    $r++;
}
亚历克斯

首先,循环中的第二次迭代将覆盖数组“ $ values”的值,这就是为什么您只能看到第二个产品节点中的值的原因(如果您正在检查“ $ values”数组,这就是我假设你在做)。

试试这个:

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml); 
$xpath = new DOMXPath($xmlDoc);
$x = $xmlDoc->getElementsByTagName("product");
$array = array('id','pn','stock','item_number');
$values = array();

foreach ($x as $product) {
    $data = array();

    // node name here
    $data['node'] = $product->nodeName;

    foreach ($array as $v){
        $obj = $xpath->query($v, $product)->item(0);
        if (gettype($obj) == 'object'){
            $data[$v] = $obj->textContent; 
        }  
    }
    $values[] = $data;
}
echo '<pre>' . print_r($values, true). '</pre>';

那应该产生这个:

Array
(
[0] => Array
    (
        [node] => product
        [id] => 1336
        [pn] => NX.RZNAA.003
        [stock] => 1.00
    )

[1] => Array
    (
        [node] => product
        [id] => 1337
        [pn] => NX.RZNAA.004
        [stock] => 4.00
        [item_number] => 5
    )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 PHP 中查询 SQL 解析 XML 时出错

来自分类Dev

在php中解析XML

来自分类Dev

在php中解析xml

来自分类Dev

查询C#中的XML解析?

来自分类Dev

INSERT查询中的PHP解析错误

来自分类Dev

解析为PHP类属性的SQL查询中的解析错误

来自分类Dev

PHP中的XML解析-获取特定值

来自分类Dev

从php中的mysqldump进行xml解析

来自分类Dev

在php中解析XML Caldav请求

来自分类Dev

如何使用simplexmlelement在PHP中解析XML?

来自分类Dev

如何解析php中的xml?

来自分类Dev

使用DOM解析PHP中的XML文件

来自分类Dev

使用DOM解析PHP中的XML文件

来自分类Dev

在PHP中从XML内部解析HTML标签

来自分类Dev

如何在php中解析复杂的xml

来自分类Dev

在php中解析XML Caldav请求

来自分类Dev

使用SimpleXML在PHP中解析XML

来自分类Dev

如何解析php中的xml?

来自分类Dev

PHP 中 XML 解析和函数的问题

来自分类Dev

使用Linq查询解析List <CustomClass>中的XML

来自分类Dev

如何在SQL查询中解析多个名称空间xml

来自分类Dev

解析XML以获取SQL查询中的列值

来自分类Dev

sql服务器从选择查询中解析xml

来自分类Dev

XML 中的 SOAP XML - 如何用 PHP 解析

来自分类Dev

MYSQL - 解析 XML 并运行查询

来自分类Dev

使用 PHP 中 RootElement 中的命名空间解析 XML

来自分类Dev

在WatchKit中解析查询

来自分类Dev

在解析中查询列

来自分类Dev

在WatchKit中解析查询