У меня есть класс, который принимает этот 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 поставляется с некоторыми оговорками.
Поскольку я использовал класс unserializer, почти все мои методы взаимодействуют с методами функций, такими как 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 или создать массив и оставить мои методы такими, какие они есть, чтобы снизить вероятность появления новых ошибок?
Спасибо.