Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从SimpleXMLElement字段获取值_Php_Xml_Simplexml_Docusignapi - Fatal编程技术网

Php 从SimpleXMLElement字段获取值

Php 从SimpleXMLElement字段获取值,php,xml,simplexml,docusignapi,Php,Xml,Simplexml,Docusignapi,所以我的问题是:我有一个XML文件,已经加载到SimpleXML中 <EnvelopeStatus> <RecipientStatuses> <RecipientStatus> <FormData> <xfdf> <fields> <field name="ubi_num">

所以我的问题是:我有一个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>

尝试进入特定字段时,没有任何效果。谁能给我指一下正确的方向吗?提前感谢。

您的
字段
元素包含许多其他元素。要访问它们并提取所需结果,只需在伪数组上循环,如下所示:

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