Simplexmlelement - 如何从节点访问htmltag

时间:2014-04-30 15:18:40

标签: php simplexml

我试图通过以下Feed获取状态。

<item>
    <unit:leaseTerm>12 Months</unit:leaseTerm>
    <unit:status><a href="xxxxx">Occupied</a></unit:status>
    </item>

    $feed = new SimpleXMLElement($content);
    $ns = $feed->getDocNamespaces(TRUE);

    $unit_ns = (string) $ns['unit'];

    foreach ($feed->channel->item as $entry) {
     $unit = $entry->children($unit_ns ); 
     $unit_leaseTerm = $unit->leaseTerm;
     $unit_status = $unit->status;

    }

我可以得到单位:leaseTerm,因为它是纯文本。

如何从Feed中访问状态?我想得到被占领的&#39;来自节点。

在解析时是否有摆脱html标签?

由于

3 个答案:

答案 0 :(得分:0)

我不确定这是否有效只是检查一下

$res = $feed->xpath('//unit:status');
echo (string)$res[0];

答案 1 :(得分:0)

这里有一些便宜的hax:(因为XML格式错误)

//Cast the values of the Simple XML Object into a associative array
$xmlData = get_object_vars($feed);
//Cast the values of the sub Simple XML object into an associative array
$ocVars = get_object_vars($xmlData['unit:status']);
//And voila! Using "a" index, because that seems to be the "XML" node 
     //contianing the value
$occupiedValue = $ocVars['a'];

答案 2 :(得分:0)

  

在解析时是否有摆脱html标签?

这不是HTML标记。我的意思是你把它看成一个,但从技术上讲,这只是一个XML标签。

作为此XML,具有命名空间的规则适用:

$unit->status

没有<a>元素,因为<a>元素位于不同的名称空间中。所以它显示为空字符串。

然而,查看默认命名空间会给你&#34; Occupied&#34;:

$unit->status->children()[0]

这就是全部。