从SimpleXMLElement字段获取价值

时间:2013-09-17 21:16:19

标签: php xml simplexml docusignapi

所以这是我的问题:我有一个XML文件,我已经加载到SimpleXML中。

<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']

尝试到达特定领域时没有任何效果。有人可以指出我正确的方向吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

所以这就是我解决问题的方法:我创建了一些空变量来保存我的数据。

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

然后我使用switch语句启动了foreach循环。

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;
  }

}

然后我使用所需的变量和其他数据设置我的数组,然后使用fopen和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);

我很高兴它有效,因为它让我发疯了!

答案 1 :(得分: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()方法