0

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

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

尝试进入特定领域时没有任何效果。有人可以指出我正确的方向吗?先感谢您。

4

2 回答 2

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

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

于 2013-09-18T21:57:42.567 回答
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

演示!

文档:children()方法

于 2013-09-17T21:35:15.013 回答