2013-02-10 5 views
-1

Я уже два дня прикладываю голову к стене, пытаясь понять, как получить PHP до кодировать XML, который я хочу. Я попробовал SimpleXML и обнаружил, что существуют серьезные ограничения, поэтому для теперь я использую DomDocument для удовлетворения моих потребностей. Моя проблема довольно простая, что такое правильный синтаксис?Как PHP DomDocument создает атрибуты?

Я извлекаю код из базы данных, а затем передаю его в xml. Структура XML должна быть в том же точном формате, что и тот, который я собираюсь опубликовать. Проблема в том, когда дело доходит до атрибутов. Вывод имеет три атрибута, которые нужно повторять двенадцать раз с разными значениями. Моя проблема заключается в том, чтобы выяснить, как визуализировать атрибуты, какой код необходим.

Вот XML:

<inits> 
<version>18.05.04_EP1</version> 
<source>Live</source> 
<lowid>265067</lowid> 
<highid>265068</highid> 
<ql>300</ql> 
<name>Ofab Shark Mk 1</name> 
<inits slider="DEF&gt;===========][&lt;AGG" percent="100" init="430" /> 
<inits slider="DEF&gt;==========][=&lt;AGG" percent="90" init="530" /> 
<inits slider="DEF&gt;=========][==&lt;AGG" percent="81" init="630" /> 
<inits slider="DEF&gt;========][===&lt;AGG" percent="72" init="730" /> 
<inits slider="DEF&gt;=======][====&lt;AGG" percent="63" init="830" /> 
<inits slider="DEF&gt;======][=====&lt;AGG" percent="54" init="930" /> 
<inits slider="DEF&gt;=====][======&lt;AGG" percent="45" init="1030" /> 
<inits slider="DEF&gt;====][=======&lt;AGG" percent="36" init="1130" /> 
<inits slider="DEF&gt;===][========&lt;AGG" percent="27" init="1290" /> 
<inits slider="DEF&gt;==][=========&lt;AGG" percent="18" init="1590" /> 
<inits slider="DEF&gt;=][==========&lt;AGG" percent="9" init="1890" /> 
<inits slider="DEF&gt;][===========&lt;AGG" percent="0" init="2190" /> 

</inits> 

Обратите внимание, что Inits содержит атрибуты, проценты и инициализации. Это будет отображаться 12 раз в этом примере, который получен из данных и вычислений php. Вот код, который я использую до сих пор. Примечание. Я пропускаю данные и функции вычисления и вручную заполняю данные.

$root = $doc->createElement('inits'); 
$root = $doc->appendChild($root); 

$version = $doc->createElement('version'); 
$version = $root->appendChild($version); 
$versiontext = $doc->createTextNode($patchNum); 
$versiontext = $version->appendChild($versiontext); 

$source = $doc->createElement('source'); 
$source = $root->appendChild($source); 
$sourcetext = $doc->createTextNode('live'); 
$sourcetext = $source->appendChild($sourcetext); 

$xlowid = $doc->createElement('lowid'); 
$xlowid = $root->appendChild($xlowid); 
$xlowidtext = $doc->createTextNode($lowid); 
$xlowidtext = $xlowid->appendChild($xlowidtext); 

$xhighid = $doc->createElement('highid'); 
$xhighid = $root->appendChild($xhighid); 
$xhighidtext = $doc->createTextNode($highid); 
$xhighidtext = $xhighid->appendChild($xhighidtext); 

$xql = $doc->createElement('ql'); 
$xql = $root->appendChild($xql); 
$xqltext = $doc->createTextNode($ql); 
$xqltext = $xql->appendChild($xqltext); 

Куда я иду отсюда, чтобы получить 3 атрибута для работы, точно так же, как приведенный выше пример XML. Спасибо.

+0

Если вы не получите ответа, улучшайте свой вопрос. У него серьезные проблемы в первый раз, вы не спросили, что вас беспокоит. Вы просто получили ответ на это по везению. Голосование закрывается. – hakre

+0

Возможный дубликат [Хронология кодирования ошибок с PHP и SimpleXML] (http://stackoverflow.com/questions/14791894/trouble-encoding-xml-with-php-and-simplexml) – hakre

+0

Ничего подобного, если вы набрали точки отталкивания от новичка , Первый вопрос был связан с SIMPLEXML. Когда я понял, что это тупиковый метод, я опубликовал о DOMDocumen, что делает его другим вопросом, хотя те же данные были отнесены. Что, если бы я попросил эти данные для JSON? Будет ли это дублировать? Я бы так не думал, но спасибо за советы. Я рад, что нашел этот сайт. –

ответ

0

Чтобы установить атрибут, используйте $some_node->setAttribute("name","value"). Повторите по мере необходимости для всех атрибутов.

Кроме того, обратите внимание, что вы можете функции цепи вызовов:

$root = $doc->appendChild($doc->createElement('inits')); 
$root->appendChild($doc->createElement('version',$patchNum)); 
$root->appendChild($doc->createElement('source',$sourcetext)); 
$root->appendChild($doc->createElement('lowid',$lowid)); 
$root->appendChild($doc->createElement('highid',$highid)); 
$root->appendChild($doc->createElement('ql',$ql)); 
for($i=11;$i>=0;$i--) { 
    $node = $root->appendChild($doc->createElement('inits')); 
    $node->setAttribute("slider","DEF>".str_repeat("=",$i)."][".str_repeat("=",11-$i)."<AGG"); 
    $node->setAttribute("percent",floor($i/11*100)); 
    $node->setAttribute("init",$i>3 ? 430+(11-$i)*100 : 1290+(3-$i)*300); 
} 
+0

Да, спасибо. Ты жжешь! –

+0

* Если атрибут не существует, он будет создан. * - и также можно подключить. 'createElement' позволяет напрямую установить значение. Просто заметив. – hakre

+0

@hakre Это правда. Обычно я приравниваю DOMDocument к методам JavaScript DOM, поэтому я забыл. –

Смежные вопросы