2011-10-01 49 views
0

我与XML的数据等的字符串:解析XML状数据

<header>Article header</header> 
<description>This article is about you</description> 
<text>some <b>html</b> text</text> 

我需要将其解析为变量/对象/阵列“头”,“描述”,“文本”。

这样做的最好方法是什么?我试过$vars = simplexml_load_string($content),但它不起作用,因为它不是100%纯xml(没有<?xml...)。
那么,我应该使用preg_match?这是唯一的方法吗?

+0

尝试DOM文档 – usoban

+0

究竟是什么不起作用? –

+0

这不是xml。所以'simplexml'不起作用。 – Qiao

回答

4

您的XML字符串看起来像(尽管可能或不可能)XML文档片段。 PHP可以使用DOMDocumentFragment类来处理这个问题。

$doc = new DOMDocument; 
$frag = $doc->createDocumentFragment(); 
$frag->appendXML($content); 

$parsed = array(); 
foreach ($frag->childNodes as $element) { 
    if ($element->nodeType === XML_ELEMENT_NODE) { 
     $parsed[$element->nodeName] = $element->textContent; 
    } 
} 

echo $parsed['description']; // This article is about you 
0

用这样的字符串,simlexml_load_string应该可以工作。

由于第三标签,如果你设法得到它会失败,而不是返回正确的值(因为在标签内的子部分。

尝试这样的事情,这可能会为工作你:

$xml = simplexml_load_string($content) 
$text = $xml->text->asXML(); 

你也应该看看这个文件:http://www.php.net/manual/en/simplexmlelement.asxml.php他们也做同样的事情用字符串你可能想使用此选项,而不是simplexml_load_string

$xml = new SimpleXMLElement($string); 
。 210
+0

'simplexml_load_string'在没有''或顶层元素时抛出错误。 'SimpleXMLElement'可能是要走的路。 – Qiao