我有一个获取此xml文件的类:
<?xml version="1.0" encoding="utf-8" ?>
<pagedata>
<language>en-es</language>
<meta>
<![CDATA[
<title>web page</title>
]]>
</meta>
<pagecontent>
<class>test</class>
</pagecontent>
</pagedata>
并使用XML_Unserializer将其变为数组。它变成了:
Array
(
[language] => en-US
[meta] => <title></title>
[pagecontent] => Array
(
[class] => test
)
然后我有方法返回数组中键的值。例如,如果我想要使用$class->getData('language')
或$class->getData('pagecontent:class')
。
我们不再支持PHP4,因此我现在可以依赖原生XML实现。我使用过SimpleXML和标准的php DOM库。我更喜欢后者,因为它更强大,更灵活,简单的XML带有一些警告。
由于我使用了反序列化器类,因此几乎所有方法都与foreach
等函数方法交互。我想知道是否值得保持它是一个数组,这将使我免于重构我的所有方法?另外,我知道抓取元素的整个nodeValue有时会很痛苦,因为那时你必须实现如下方法:
function innerHTML($node){
$doc = new DOMDocument();
foreach ($node->childNodes as $child)
$doc->appendChild($doc->importNode($child, true));
return $doc->saveHTML();
}
由于它总是创建一个DOMDocument,因此使用该方法似乎效率很低。我可能可以重构该方法,因此它反复使用相同的DOMDocument并附加片段,但它似乎有点过分。
对于我是否应该使用标准DOM lib,我是否会感谢任何输入,如果是这样,我应该重构所有方法来使用DOM函数或创建数组并保持我的方法不变,为了降低引入新bug的机会?
感谢。
答案 0 :(得分:0)
我会在你的情况下使用SimpleXML,因为只用很少的改动就可以保持foreach循环。它使用XML比使用PHP的DOM本身更简单。使用它也很容易访问属性。