从Xpath查询生成的PHP数组 - 尝试提取数据

时间:2011-06-14 02:54:27

标签: php xml arrays xpath simplexml

我目前正在尝试从SIMPLEXML / XPATH查询生成的数组中提取值。我的尝试没有成功,如果有人可以采取看起来将非常感激。

我只想提取ReclaimDate。我已经尝试了this post上的一些功能和一些建议而没有运气。

Array
(
[0] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [@attributes] => Array
                    (
                        [ReclaimDate] => 05/15/2008
                        [ReclaimPrice] => 555555555
                        [_Owner] => ownername
                    )

            )

    )

2 个答案:

答案 0 :(得分:1)

如果我不得不采取刺,我同意@Frank Farmer所说的应该有效:

    // if $myVar is what you print_r'ed
    echo (string)$myVar[0][0]['ReclaimDate'];

或者

    echo (string)$myVar[0][0]->attributes('ReclaimDate');

http://www.php.net/manual/en/simplexml.examples-basic.php#example-4587

答案 1 :(得分:0)

感谢Frank Farmer和Dan Beam解决了这个问题。

这有效:echo (string)$check_reo[0][0]['ReclaimDate']

对于那些希望使用SimpleXML和XPATH从XML文件中提取和编写一些基本逻辑的人来说,这对我有用。

$xmlstring = <<<XML <?xml version='1.0' standalone='yes'?> <YOURXMLGOESHERE>TEST</YOURXMLGOESHERE> XML;

$xpathcount = simplexml_load_string($xmlstring); // Load XML for XPATH Node Counts

$doc = new DOMDocument(); // Create new DOM Instance for Parsing

$xpathcountstr = $xpathcount->asXML(); // Xpath Query

$doc->loadXML($xpathcountstr); // Load Query Results

$xpathquery = array($xpathcount->xpath("//XMLNODEA[1]/XMLNODEB/*[name()='KEYWORDTOCHECKIFXMLCEXISTS']"));

print_r ($xpathquery) // CHECK Array that is returned from the XPATH query

`阵列 ( [0] =&gt;排列     (         [0] =&gt; SimpleXMLElement对象             (                 [@attributes] =&gt;排列                     (                         [ReclaimDate] =&gt; 2008年5月15日                         [ReclaimPrice] =&gt; 555555555                         [_Owner] =&gt; OWNERNAME                     )

        )

) // Array RETURNED`

echo (string)$xpathquery[0][0]['ReclaimDate'] // EXTRACT THE VALUE FROM THE ARRAY COLUMN;

这个网站帮助我更好地理解XPATH如何使用比我之前所知的更多功能轻松搜索XML。

http://zvon.org/xxl/XPathTutorial/Output/examples.html

以下是适用于我的简单XML函数

$xmlread = simplexml_load_string($xmlstring, "simple_xml_extended");

`class simple_xml_extended扩展SimpleXMLElement {//读取XML和get属性      public function Attribute($ name){         foreach($ this-&gt; Attributes()as $ key =&gt; $ val){             if($ key == $ name)                 return(string)$ val;

    }
}

}`

以下是使用基于属性的XML结果

提取单个值时的Function操作

$GETVAR1 = $xmlread->XMLNODE1->XMLNODE2->XMLNODE3->XMLNODE4->XMLNODE5[0]->Attribute('XMLNODE5ATTRIBUTE');

这可能不是最有效或最好的方法,但它结束了我的工作。希望这可以帮助那些仍然不清楚SIMPLEXML和XPATH的人。

进一步了解的其他链接:http://www.phpfreaks.com/tutorial/handling-xml-data