PHP - 从xml获取值

时间:2014-02-20 08:47:39

标签: php xml xpath

我从xml获取值时遇到了一些问题。

XML看起来像

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://crd.gov.pl/xml/schematy/UPO/2008/05/09/UPO.xsl"?>
<pos:Document xmlns:pos="SOMEURL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <pos:DescribeDoc/>
   <pos:UPD>
      <pos:IdDoc>procotol-UPD2198338</pos:IdDoc>
      <pos:IdCases>221872</pos:IdCases>
      <pos:additionalInfo TypeInfo="Source">Some string</pos:additionalInfo>
   </pos:UPD>
...

我一般试着去找pos:IdCases。 我试试这段代码:

$domContent = new SimpleXMLElement(((string) $content), LIBXML_COMPACT);
$test = $domContent->xpath('/pos:Document/pos:UPD/*');
foreach($test as $node){
    print_r($node)
}

我得到一些像

这样的对象
SimpleXMLElement Object
(
     [0] => procotol-UPD2198338
)

SimpleXMLElement Object
(
    [0] => 221872
)

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [TypeInfo] => Source
        )

    [0] => Some string
)

但我必须得到pos:IdCases。我不能使用索引[1]因为顺序可以改变。

我的问题是: 我怎样才能在node:pos:IdCases中获得价值 我无法向节点添加id或其他信息,因为此xml已签名(XADES)。

你能给我一些建议吗?谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

只需更改XPath以匹配<Pos:IdCases/>节点:

$test = $domContent->xpath('/pos:Document/pos:UPD/pos:IdCases');