在 WooCommerce 中从 xml 图像 asp 链接推断和下载

Extrapolate and download from xml images asp link in WooCommerce

提问人:Lab Ev. 提问时间:10/16/2023 最后编辑:Professor AbronsiusLab Ev. 更新时间:10/17/2023 访问量:50

问:

我们有来自 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 的文件夹中下载这些图像? 感谢那些愿意回应的人

php xml woocommerce soap wsdl

评论

0赞 Professor Abronsius 10/17/2023
DOMDocument允许您访问 XML,然后您可以使用它来选择所有节点。一旦你有了这个节点列表,你就可以遍历它们,并使用并将每个文件保存到磁盘getElementsByTagNameFDI_0843file_put_contentsfile_get_contents
0赞 Professor Abronsius 10/17/2023
但是,由于 URL 中的 ,上述 XML 将无法正确解析。为了确保 XML 确实解析这些 url 应该在部分内 - 要么,要么您添加了 XML 的 urldecoded 版本,其中这些 url 实际上是 url 编码的,并且 & 符号由 ??&cdata&amp;
0赞 Lab Ev. 10/17/2023
感谢 @professor-abronsius 的回复。你有机会举一个代码的例子吗?我们才刚刚开始进入这个世界。谢谢。

答:

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&amp;tipodoc=TE009T&amp;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&amp;tipodoc=TE009X&amp;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)