PHP使用SimpleXML处理命名空间

时间:2011-11-26 01:31:49

标签: php xml namespaces xml-namespaces

我真的需要使用命名空间的帮助。如何使以下代码正常工作?

<?php
$mytv = simplexml_load_string(
'<?xml version="1.0" encoding="utf-8"?>
 <mytv>
    <mytv:channelone>
        <mytv:description>comedy that makes you laugh</mytv:description>
    </mytv:channelone>
 </mytv>'
);

foreach ($mytv as $mytv1)
{
    echo 'description: ', $mytv1->children('mytv', true)->channelone->description;
}
?>

我要做的就是获取name元素中的内容。

1 个答案:

答案 0 :(得分:2)

当yu使用xml中的命名空间时,yu应该定义命名空间,无论你使用什么......!在我发布的代码中你可以看到如何定义你正在使用的命名空间..

你需要显示特定于命名空间的描述不是吗?如果我错了,请纠正我。并且请妥善发布我的目的,以便我能理解你的问题..

使用此代码,看看您是否可以得到一些想法..

$xml ='<mytv>
 <mytv:channelone xmlns:mytv="http://mycompany/namespaces/mytvs">
    <mytv:description >comedy that makes you laugh</mytv:description>
 </mytv:channelone>
</mytv>';

$xml = simplexml_load_string($xml);

$doc = new DOMDocument();  
$str = $xml->asXML(); 
$doc->loadXML($str); 

$bar_count = $doc->getElementsByTagName("description");

foreach ($bar_count as $node) 
{   
echo $node->nodeName." - ".$node->nodeValue."-".$node->prefix. "<br>";
}

此处,值“$ node-&gt; prefix”将是包含“description”的标记的命名空间。

getElementsByTagName(“description”)用于将包含描述的xml中的所有元素作为标记... !!然后使用“$ node-&gt;前缀”,根据需要与特定命名空间进行比较,然后打印..