2013-09-17 1 views
0

Итак, вот моя проблема: у меня есть файл XML, который я загрузил в SimpleXML.Получение значения из поля SimpleXMLElement

<EnvelopeStatus> 
    <RecipientStatuses> 
     <RecipientStatus> 
     <FormData> 
      <xfdf> 
      <fields> 
       <field name="ubi_num"> 
       <value>2222</value> 
       </field> 
       <field name="lic_num"> 
       <value>1111</value> 
       </field> 
       <field name="tra_nam"> 
       <value>Flakey</value> 
       </field> 
      </fields> 

Я пытаюсь получить доступ к полям в FormData. Это последний запрос SimpleXML, который я пробовал:

$xml->EnvelopeStatus->RecipientStatuses->RecipientStatus->FormData->xfdf->fields->field['ubi_num'] 

Ничего не работало при попытке добраться до определенного поля. Может ли кто-нибудь указать мне в правильном направлении? Заранее спасибо.

+0

'fields' содержит несколько элементов' field', которые вам нужно будет перебрать или определить по индексу –

ответ

1

Так вот как я решил свою проблему: я создал несколько пустых переменных для хранения моих данных.

$ubinum = ""; 
$licnum = ""; 
$tranam = ""; 

Затем я начал свой цикл foreach с помощью оператора switch.

foreach ($xml->EnvelopeStatus->RecipientStatuses->RecipientStatus->FormData->xfdf->fields->field as $xmlfield) { 
    // Loop over the custom field nodes and read the name of each 
    switch ($xmlfield->attributes()->name) { 
    // Load a variable on each matching name attribute 
    // or do whatever you need with them. 
    case "ubi_num": 
     $ubinum = $xmlfield->value; 
     break; 
    case "lic_num": 
     $licnum = $xmlfield->value; 
     break; 
    case "tra_nam": 
     $tranam = $xmlfield->value; 
     break; 
    } 

} 

Затем я настроить мой массив с переменными и другими данными, необходимых, а затем использовали Еореп и FWRITE создать свой файл CSV.

$csvarr = array($ubinum, $licnum, $tranam, $xml->EnvelopeStatus->Signed, $_SERVER['DOCUMENT_ROOT'] . "/" . $xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . ".pdf"); 
$csvfiles = $xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->EnvelopeID . '.csv'; 
$file = fopen($csvfiles,"w"); 
fputcsv($file, $csvarr, '|'); 

fclose($file); 

Я рад, что это работает, потому что это сводило меня с ума!

0

Ваш fields элемент содержит много других элементов. Для того, чтобы получить доступ к ним и извлечь нужный результат, вы можете просто цикл по children() псевдо-массива, например:

$xml = new SimpleXMLElement($str);  
$children = $xml->RecipientStatuses->RecipientStatus->FormData->xfdf->fields->children(); 

foreach ($children as $child) { 
    echo $child->value . "\n"; 
} 

Выход:

2222 
1111 
Flakey 

Demo!

Документация: children() метод

+0

Есть ли лучший способ превратить мой файл в строку? У меня нет доступа к файлам XML, поскольку они поступают из стороннего программного обеспечения. Я также пишу это в CSV-файл и вытягиваю другие поля из других точек входа XML. – duckie715

+0

@ duckie715: Конечно, да. Можно загрузить XML с URL-адреса. Вместо этого используйте ['simplexml_load_file()'] (http://php.net/simplexml_load_file). –

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

  • Нет связанных вопросов^_^