我有一些简单的XML解析器
$doc = new DOMDocument();
$doc->load("xml/UploadTask.xml");
$items = $doc->getElementsByTagName( "item" );
foreach( $items as $item )
{
$keys = $item->getElementsByTagName( "key" );
$key = $keys->item(0)->nodeValue;
$values = $item->getElementsByTagName( "value" );
$value = $values->item(0)->nodeValue;
echo "$key - $value";
}
它对我来说非常有用,如果我需要解析通过POST发布的XML,我加载XML的代码看起来像(我把它放在文件顶部):
$xml = file_get_contents('php://input');
echo $xml;
并返回XML,一切正常,如果我将$ xml加载到DOM(基本上替换2. $doc->load($xml);
上的行,我没有输出,没有值的回声。< / p>
当我尝试调试时,我注意到如果我使用文件var_dump($ items) 我得到答案:
object(DOMNodeList)#2 (1) {
["length"]=>
int(0)
}
如果我在加载文件时执行var_dump()
,我会得到答案:
object(DOMNodeList)#2 (1) {
["length"]=>
int(2)
}
其中int(2)
表示找到此条件的匹配数。
所以我的问题是使用file_get_contents
解析XML加载有一些限制吗?
还有,有没有解决方法呢?
谢谢你们。
答案 0 :(得分:2)
DOMDocument::load()加载文件(或使用Streamwrappers的URL),而不是字符串。 DOMDocument::loadXml()加载字符串。
$xml = '<foo>Hello World</foo>';
$document = new DOMDocument();
$document->loadXml($xml);
var_dump($document->documentElement->textContent);
输出:
string(11) "Hello World"