2016-02-08 2 views
1

Вот мой XML:PHP и XML: Как получить атрибуты в XML

<?xml version="1.0" encoding="utf-8" ?> 
<items> 
    <itemgroup name="ATM" column="1" sort="0"> 
    <item formid="ATM 01" description="Option Teller Balance Sheet - ATM Dept. Ordering ONLY" unit="cello 500"/> 
    </itemgroup> 
    <itemgroup name="Data Processing" column="1"> 
    <item formid="AACU 01" description="Receipt Voucher - 2 Part" unit="3600/box"/> 
    <item formid="AACU 04" description="Contract Collection Statement" unit="as Req."/> 
    <item formid="AACU 07" description="1-part Receipt Voucher - Cont. feed form" unit="5000/box"/> 
    <item formid="AACU 08" description="Share IRA Certificate" unit="2200/box"/> 
    <item formid="AACU 15" description="PTA PIN MAILER" unit="1800/box"/> 
    <item formid="AACU 15B" description="ONLINE ACCESS PIN MAILER" unit="2500/box"/> 
    </itemgroup> 
</items> 

Я знаю, что нужно использовать такой код, как это:

$xml_file = "aacu-data.xml"; 
$xml = simplexml_load_file($xml_file); 

но то, что мне нужно знать, как я могу получить такие атрибуты, как описание и блок, например, где formid = «AACU 07», и иметь возможность назначать его двум переменным, таким как $ description и $ unit.

с некоторыми модификациями, которые я получил его на работу:

$xml_file = "aacu-data.xml"; 
$xml = simplexml_load_file($xml_file); 

foreach($xml->itemgroup as $itemgroup) { 
    foreach($itemgroup->children() as $items) { 

     echo $items->attributes()->formid . "<br>"; 
     echo $items->attributes()->description . "<br>"; 
     echo $items->attributes()->unit . "<br>"; 

    } 
}: 

ответ

0

Вы можете получить доступ значение с помощью attributes() метода

foreach($xml->itemgroup[1]->attributes() as $a => $b) { 
    .... 
} 

Для преобразования XML в массив

function xml2array($xmlObject){ 

    $out = array(); 

    foreach ((array) $xmlObject as $index => $node){ 
     if(is_object($node) and empty($node)){ 
      $out[$index] = ''; 
     }else{ 
      $out[$index] = (is_object ($node)) ? xml2array ($node) : $node; 
     } 
    } 
    return $out; 
} 
+0

Две вещи: (а), что если я не уверен, itemgro (а), как я могу сделать foreach, чтобы найти эту уникальную группу? –

+0

В этом случае вы можете конвертировать объект xml в массив и использовать foreach с ключом. Пара значений – Haridarshan

+0

Интересно. Мне удалось заставить цикл foreach работать, но он только вытаскивал первую строку из каждой группы элементов. Мне пришлось изменить его на то, что я добавил к моему первоначальному вопросу выше. –

1

Вы можете использовать XPath выражение и SimpleXMLxpath() функция, чтобы выберите часть фильтрации XML-документа с определенными критериями. Например, следующая строка, чтобы получить item элемент, где-нибудь в $xml, где атрибут formid значение равно "AACU 07":

$item = $xml->xpath("//item[@formid='AACU 07']")[0]; 

Имея целевой item элемент в переменной, вы можете легко получить соответствующие атрибуты через attributes():

$description = $item->attributes()->description; 
$unit = $item->attributes()->unit; 

Смотрите рабочий пример здесь: https://eval.in/514618

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