Php 从SimpleXMLElement字段获取值
所以我的问题是:我有一个XML文件,已经加载到SimpleXML中Php 从SimpleXMLElement字段获取值,php,xml,simplexml,docusignapi,Php,Xml,Simplexml,Docusignapi,所以我的问题是:我有一个XML文件,已经加载到SimpleXML中 <EnvelopeStatus> <RecipientStatuses> <RecipientStatus> <FormData> <xfdf> <fields> <field name="ubi_num">
<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>
尝试进入特定字段时,没有任何效果。谁能给我指一下正确的方向吗?提前感谢。您的
字段
元素包含许多其他元素。要访问它们并提取所需结果,只需在伪数组上循环,如下所示:
$xml = new SimpleXMLElement($str);
$children = $xml->RecipientStatuses->RecipientStatus->FormData->xfdf->fields->children();
foreach ($children as $child) {
echo $child->value . "\n";
}
输出:
2222
1111
Flakey
文档:方法所以这就是我解决问题的方法:我创建了一些空变量来保存数据
$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);
我很高兴它能起作用,因为它快把我逼疯了
字段
包含多个字段
元素,您需要循环使用这些元素,或者通过索引识别是否有更好的方法将我的文件转换为字符串?我无法访问XML文件,因为它们来自第三方软件。我还将其写入CSV文件,并从XML的其他入口点拉入一些其他字段。@duckie715:当然,是的。可以从URL加载XML。改用。
$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);