削减由file_get_contents()加载的XML

时间:2015-08-12 11:35:14

标签: php xml

我有一些简单的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加载有一些限制吗? 还有,有没有解决方法呢?

谢谢你们。

1 个答案:

答案 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"