1

我有一个接受这个 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 库。我更喜欢后者,因为它更强大、更灵活,而且 simpleXML 带有一些注意事项。

由于我使用了反序列化器类,几乎我所有的方法都与函数方法交互,例如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 库,如果是,我是否应该重构我的所有方法以使用 DOM 函数或创建一个数组并保持我的方法不变,以便降低引入新错误的机会?

谢谢。

4

1 回答 1

0

我会在您的情况下使用 SimpleXML,因为只需进行少量更改即可保持 foreach 循环。它使使用 XML 比使用 PHP 的 DOM 本身更简单。使用它访问属性也很容易。

于 2011-04-24T23:59:42.703 回答