是否有任何方法正确地迭代我的侦听器中的数组,该数组包含每个PDF的PDF字节数据并将每个数组写入一个单独的文本文件?我已经做了三天了,只能让它写第一个,仅此而已。
编辑:这里是我将其简化为:
foreach($xml->DocumentPDFs->DocumentPDF as $value) {
$value = $value->PDFBytes;
$binary = base64_decode($value);
file_put_contents($xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . ".pdf", $binary);
}我在用这个:
$docarr = array();
foreach($xml->DocumentPDFs as $DocumentPDFs){
foreach ($DocumentPDFs->DocumentPDF as $DocumentPDF) {
$docarr[] = $DocumentPDF->PDFBytes;
foreach ($docarr as $pdfbyte) {
$docfiles = $xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . '.txt';
$doctxt = fopen($docfiles,"w");
write($doctxt,$pdfbyte);
fclose($doctxt);
}
}
}出于某种原因,它只在第一个块上迭代,打印,然后停在那里。
新编辑-所以我只是将XML加载到simplexml_load_file中。这是$xml->DocumentPDF上的print_r:
SimpleXMLElement Object
(
[DocumentPDF] => Array
(
[0] => SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAo...
[DocumentType] => CONTENT
)
[1] => SimpleXMLElement Object
(
[Name] => LLC_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0Z...
[DocumentType] => CONTENT
)
[2] => SimpleXMLElement Object
(
[Name] => Demo Document.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KNiAwIG9iago8PAovUGFyZW5...
[DocumentType] => CONTENT
)
[3] => SimpleXMLElement Object
(
[Name] => CertificateOfCompletion_4b79ca0d-bbc4-4b2b-9993-295755d3b3ad.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago...
[DocumentType] => SUMMARY
)
)
)$xml上的print_r ->DocumentPDF->DocumentPDF:
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoRDoyMDEzMD...
[DocumentType] => CONTENT
)
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoRDoyMD...
[DocumentType] => CONTENT
)
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoRDoyMDEzMDkx...
[DocumentType] => CONTENT
)
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoR...
[DocumentType] => CONTENT
)由于某种原因,它正确地返回了DocumentPDF,但是当我深入到DocumentPDF中时,它返回的基本相同。为什么会这样呢?
更新的编辑-所以我只是更改了对$xml->DocumentPDFs->DocumentPDF->PDFBytes as $value的foreach调用,对相同的项执行了一个print_r,DocumentPDF上的打印返回了相同的内容,但是DocumentPDF上的打印返回了一个对象。据我所知,我的解析是正确的。
更多的新编辑--我将foreach循环更改为:
foreach($xml->DocumentPDFs as $DocumentPDFs) {
foreach ($DocumentPDFs->DocumentPDF as $DocumentPDF) {
foreach ($DocumentPDF->PDFBytes as $pdfbytes) {
$binary = base64_decode($pdfbytes);
file_put_contents($xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . ".pdf", $binary);
}
}
}然后我又做了一次打印,DocumentPDF上的那个现在打印了正确的信息。不过,我还是不能把所有的PDF都写出来。有什么想法吗?
最新编辑-所以我把它变成了一个常规数组:
$json = json_encode($xml);
$array = json_decode($json,TRUE);
foreach($array['DocumentPDFs']['DocumentPDF'] as $DocumentPDF){
$binary = base64_decode($DocumentPDF['PDFBytes']);
file_put_contents($xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . ".pdf", $file);
}但它仍然只是打印最后的PDF。我做错什么了?!
发布于 2013-09-19 22:18:25
在PHP中,foreach()循环只在格式正确的数组上工作。如果您当前正在循环使用:
foreach($xml->DocumentPDFs->DocumentPDF as $value)
{
...
}它只循环一次,这意味着:
1. $xml->DocumentPDFs->DocumentPDF is not a valid / properly formatted array OR
2. There is only one PDF in the given envelope (i.e. only 1 array element)假设您正在使用一个包含多个PDF的信封进行测试,您是否验证了将xml正确地解析到您的$xml对象中?您可能希望在每个级别(即DocumentPDF、DocumentPDF->DocumentPDF)执行var_dump()或print_r(),这可能会暴露问题所在。
更新
我能够使用下面的PHP代码来完成这个任务。试着用这个,它对我有用。我现在已经注释掉了PDFBytes,因为它将所有的数据写入输出,在un-注释之前尝试一下,看看您是否获得了唯一的文档名称和类型.
<?php
$xml = file_get_contents("PATH_TO_YOUR_XML_FILE");
$obj = new SimpleXMLElement($xml);
foreach($obj->{'DocumentPDFs'}->DocumentPDF as $value)
{
print_r($value->Name);
print_r($value->DocumentType);
//print_r($value->PDFBytes);
}
?>https://stackoverflow.com/questions/18903942
复制相似问题