提问人:Lab Ev. 提问时间:10/16/2023 最后编辑:Professor AbronsiusLab Ev. 更新时间:10/17/2023 访问量:50
在 WooCommerce 中从 xml 图像 asp 链接推断和下载
Extrapolate and download from xml images asp link in WooCommerce
问:
我们有来自 SOAP 的输出 XML,我们需要将其下载到具有与 XML 中找到的文件名相同的文件夹中。I file IMG hanno un accesskey:
<?xml version="1.0" encoding="UTF-8"?>
<TableResult>
<Product>
<FDI_0843>https://ws.farmadati.it/WS_DOC/GetDoc.aspx?accesskey=xxxxxxx&tipodoc=TE009&nomefile=001536.jpg</FDI_0843>
<FDI_0840>908872245</FDI_0840>
</Product>
<Product>
<FDI_0843>https://ws.farmadati.it/WS_DOC/GetDoc.aspx?accesskey=xxxxxxx&tipodoc=TE009&nomefile=005075.jpg</FDI_0843>
<FDI_0840>908057906</FDI_0840>
</Product>
我们如何创建一个脚本来在 Woocommerce 或 FTP 的文件夹中下载这些图像? 感谢那些愿意回应的人
答:
0赞
Professor Abronsius
10/17/2023
#1
由于 XML 文件中的 URL 受到保护,因此无法完全测试以下内容,但您可以尝试这样做,请注意 XML 已稍作修改
$xmlstring='<?xml version="1.0" encoding="UTF-8"?>
<TableResult>
<Product>
<FDI_0843>https://ws.farmadati.it/WS_DOC/GetDoc.aspx?accesskey=0123BFJ-652e56b0beCad9CBe1c375daCa9A089D35Aab280c&tipodoc=TE009T&nomefile=001536.jpg</FDI_0843>
<FDI_0840>908872245</FDI_0840>
</Product>
<Product>
<FDI_0843>https://ws.farmadati.it/WS_DOC/GetDoc.aspx?accesskey=0223BFJ-652e56b0beCad9CBe1c375daCa9A089D35Aab280c&tipodoc=TE009X&nomefile=005075.jpg</FDI_0843>
<FDI_0840>908057906</FDI_0840>
</Product>
</TableResult>';
/**************************************************
Determine where you will save files to
and amend this path as necessary. Currently
this creates a new directory under the current
working directory if it does not exist.
*/
$save_directory=__DIR__ . '\\save_images_here';
if( !file_exists( $save_directory ) ) {
mkdir( $save_directory, 0777, true );
}
/*******************************************
Create the DOMDocument instance & load
the XML string ( or file )
Query the DOM to find all relevant nodes
and process that nodelist to extract
name of file.
Note in the xml string the ampersand
is encoded as HTML entity!
*/
libxml_use_internal_errors( true );
$dom = new DOMDocument;
$dom->validateOnParse=false;
$dom->strictErrorChecking=false;
$dom->recover=true;
$dom->loadXML( $xmlstring );
libxml_clear_errors();
/*
Find all nodes - FDI_0843
*/
$col=$dom->getElementsByTagName('FDI_0843');
if( $col && $col->length > 0 ){
foreach( $col as $node ){
# decode the value held by the node
$url=urldecode( $node->nodeValue );
# extract the querystring
$querystring=parse_url( $url, PHP_URL_QUERY );
# parse the querystring
parse_str( $querystring, $output );
$nomefile=$output['nomefile'];
# create new filepath, download and save target file
$filepath=sprintf('%s\\%s',$save_directory,$nomefile);
$filedata=file_get_contents( $url );
file_put_contents( $filepath, $filedata );# error here ~ had arguments back to front
#... next
}
}
评论
0赞
Professor Abronsius
10/17/2023
我在 ~ 的参数顺序上犯了一个错误,在上面做了更正,似乎没问题。file_put_contents
0赞
Lab Ev.
10/17/2023
谢谢!你给了我一个重要的帮助......最后一件事,但是是否可以将 xml url 放在变量“$xmlstring=”而不是实际代码中?
0赞
Professor Abronsius
10/17/2023
"is it possible to put an xml url in the variable '$xmlstring=' instead of the actual code?"
- 你的意思是文件路径,以便DOMDocument可以读取XML,还是变量是实际的SOAP响应?无论哪种方式,您都可以读取文件(使用 或load($xmlfilepath)
loadXML($str)
评论
DOMDocument
允许您访问 XML,然后您可以使用它来选择所有节点。一旦你有了这个节点列表,你就可以遍历它们,并使用并将每个文件保存到磁盘getElementsByTagName
FDI_0843
file_put_contents
file_get_contents
&
cdata
&