所以这是我的问题:我有一个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']
尝试到达特定领域时没有任何效果。有人可以指出我正确的方向吗?提前谢谢。
答案 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
文档:children()
方法