当前位置: 首页 > 知识库问答 >
问题:

这些神秘的字段在这个XML中位于哪里?

慕永年
2023-03-14

我有一个从我的供应商products下载的文件。xml。我有一个脚本从这个文件中获取数据并将其放入csv文件中。

所以我正在看这个脚本,似乎有从xml中提取的数据,我在任何xml编辑器中都看不到。比如图像和类别。另一方面,我看到xml文件中的某些字段在应该放在csv中的时候没有放在csv中,比如产品名称。

除了添加产品名称和描述之外,它做的一切都是正确的。

这里是脚本将数据从xml抓取到数组中的地方。

foreach($xmlData->children() as $product){
// Create an array which holds all of the data merged from the xml file
    $filteredData = array('code' => (string)$product->sku
                     ,'name' => (string)$product->name
                     ,'brand' => (string)$product->manufacturer
                     ,'description' => (string)$product->long_description
                     ,'costPrice' => (string)$product->price
                     ,'price' => (((string)$product->price) * 2)
                     ,'freeShipping' => 0
                     ,'weight' => (string)$product->weight
                     ,'allowPurchases' => 1
                     ,'productVisible' => 1
                     ,'productAvailability' => 'Ships within 48 Hours'
                     ,'trackInventory' => 1
                     ,'stockLevel' => (string)$product->stock_quantity
                     ,'lowStockLevel' => 1
                     ,'productCondition' => 'New'
                     ,'upc' => (string)$product->barcode
                     ,'category' => '');

// First category name goes to category details field
// If more than one category name exists, last category name goes to category field
$filteredData['categoryDetails'] = (string)$product->categories->category[0];
$categoryCount = count($product->categories->children());
if($categoryCount > 1){
    $filteredData['category'] = (string)$product->categories->category[$categoryCount - 1];
}

// Product image links must be appended to: http://images.xyz.com/product_images
$staticLinkToPrepend = 'http://images.xyz.com/product_images';
$filteredData['images'] = array();
foreach($product->images->children() as $image){
    $filteredData['images'][] = $staticLinkToPrepend . ((string)$image);
}

在产品中。xml文件我看不到任何类别的参考,但是编写的代码在csv文件中生成了正确的类别。在xml文件中,我看不到任何对图像的引用,但这段代码为每个产品生成了正确的图像列表。这一切都很好,但我需要理解为什么会这样。一旦我理解了这一点,我可能就会明白为什么名称和产品描述部分不起作用。

此外,他在产品描述中只使用了“description”,但在xml文件中,它有长描述和短描述。这两种方法都不管用。该名称在xml文件中按原样列出,所以我不确定它为什么不起作用。

Array
(
[product] => Array
    (
        [0] => Array
            (
                [@attributes] => Array
                    (
                        [sku] => CATDJ
                        [type] => BR
                        [vendor] => DJ
                        [active] => 0
                        [on_sale] => 0
                        [discountable] => 0
                    )

                [name] => DJ CATALOGS
                [short_description] => Array
                    (
                    )

                [long_description] => Array
                    (
                    )

                [price] => 1.5
                [stock_quantity] => 0
                [release_date] => 2003-05-06T00:00:00-04:00
                [barcode] => 782421712315
            )

        [1] => Array
            (
                [@attributes] => Array
                    (
                        [sku] => CATPD
                        [type] => DISC
                        [vendor] => PIEDR
                        [active] => 0
                        [on_sale] => 0
                        [discountable] => 0
                    )

                [name] => PIE DRUM CATALOG
                [short_description] => Array
                    (
                    )

                [long_description] => Array
                    (
                    )

                [price] => 1.5
                [stock_quantity] => 0
                [release_date] => 2003-05-06T00:00:00-04:00
                [barcode] => 603912241230
            )

    )

)

我只是把xml文件,并把它削减到只有两个产品。我用下面的来得到上面的。

if(!file_exists($xmlFileName)){
die('* XML file path is incorrect.  Please change and try again.');
}
$xmlData = simplexml_load_file($xmlFileName);
$json = json_encode($xmlData);
$array = json_decode($json,TRUE);
print "<pre>";
print_r($array);
print "</pre>";

所以“名称”在那里,但它不会出现在最终的csv中。long_description和short_description都有,但是使用上面的代码看起来是空的,但是它们肯定在xml文件中,并且带有文本值。

我能够为我的Share-A-Sale提要创建另一个基于此脚本的脚本,但该数据来自数据库,我对此没有任何问题。但我已经在这里呆了两个星期了。我现在正在重塑我的网站,这就是为什么我首先需要它。

这是xml文件中示例条目的外观。

<products>
<product sku="CATDJ" type="BR" vendor="DJ" active="0" on_sale="0" discountable="0">
<name>DJ CATALOGS</name>
<short_description><![CDATA[some short description]]></short_description>
<long_description><![CDATA[some long description]]></long_description>
<price>1.5</price>
<stock_quantity>0</stock_quantity>
<release_date>2003-05-06T00:00:00-04:00</release_date>
<barcode>782421712315</barcode>
</product>
</products>

更新:现在我真的很困惑。我找到了一个旧版本的产品。查看供应商是否更改了xml文件。这是非常不同的,我可以看到更多的领域(见下文),但我仍然感到困惑的是,目前的产品文件,没有列出的图像和类别数据如何仍然可以产生的csv文件中的数据。

 <product active="1" on_sale="0" discountable="0">
 <sku>AL1012XO</sku>
 <name>
  <![CDATA[LACE UP GLOVES]]>
</name>
<description>
  <![CDATA[Able to be adjusted as tight as you desire with a lace-and-grommet closure, they extend over the tops of the hands and have a built-in finger loop for a sleek look.]]>
</description>
<keywords></keywords>
<price>10.100000</price>
<stock_quantity>34</stock_quantity>
<reorder_quantity>0</reorder_quantity>
<height>0.000000</height>
<length>0.000000</length>
<diameter>0.000000</diameter>
<weight>0.000000</weight>
<color>Black</color>
<material>cotton</material>
<barcode>883125011270</barcode>
<release_date>2008-11-10</release_date>
<images>
  <image>/AL1012XO/AL1012XO.jpg</image>
  <image>/AL1012XO/AL1012XOB.jpg</image>
</images>
<categories>
  <category code="166" video="0" parent="172">Clothing</category>
  <category code="172" video="0" parent="">Clothing</category>
  <category code="641" video="0" parent="172">Accessories</category>
  <category code="167" video="0" parent="1001">Costumes</category>
</categories>
<manufacturer code="AL" video="0">Golvers</manufacturer>
<type code="AC" video="0">AC</type>

更新:我想我快到了。我仍然不知道为什么我看不到xml文件中的所有内容,但它仍然在那里。csv正是我想要的,但是我仍然无法在csv文件中获得名称和描述。值得注意的是,名称和描述的引用是正确的,并使用print_r打印数据,但问题似乎是将数据输入csv文件。这两个字段似乎是[CDATA[的唯一两个,所以我正在研究为什么CDATA字段没有进入csv文件。我现在也在用这个。

$xmlData = simplexml_load_file($xmlFileName, null, LIBXML_NOCDATA);

我已经放弃了。我浏览了这个网站和网络,感觉自己什么都试过了。我不明白为什么在其他一切正常的情况下,“名称”和“描述”数据不会写入csv文件。xml文件中的名称和描述似乎非常简单。我知道这个脚本在一年多前就开始工作了,我不知道为什么它现在不能只为这两件事工作(

共有2个答案

谈琛
2023-03-14

我的供应商将是我的死亡。它们有3个不同的xml链接,都声称是整个目录。他们都不是。我是从一个旧的链接中提取的。我仍然不知道为什么它不会把名字和描述放在csv中,因为这些字段都在那里。但我使用了上面列出的一个,我觉得它有隐藏字段(它没有),是的,它缺少了大多数有用的产品数据。去看了至少一个不同的xml文件,他们说有图像,它有我需要的所有信息。所有这些痛苦都是徒劳的

顾英发
2023-03-14

您想使用LIBXML\u NOCDATA。这适用于我使用您的示例数据:

$xmlData = simplexml_load_string($xml, null, LIBXML_NOCDATA);    
echo $xmlData->product->name."\n";
echo $xmlData->product->short_description."\n";
echo $xmlData->product->long_description."\n";

输出:

DJ CATALOGS
some short description
some long description
 类似资料:
  • 我大致了解ES6函数箭头的工作原理。我也明白有时括号可以用来隐式返回对象。但是,就React/JSX而言,下面的括号是必要的吗? 还是可以简单地执行以下操作? 所以,我想我真正应该问的是jsx元素是否被视为js对象。如果是这样的话,那么括号可能是用来从fat-arrow函数隐式返回它们的。

  • 如果标题听起来很模糊,我很抱歉。 我有个目标- 还有这些物品的清单- 我想通过合并具有相同帐户ID的对象来操作这个列表,方法是将vat字段和总计费用字段相加,前提是它们也具有相同的发票日期。 如果两个对象具有相同的帐户ID但不同的发票日期,则它们不应合并。

  • 在通过RabbitMQ发送数据时,我使用XStream1.4.8对XML进行序列化。在某些情况下,会将类名添加到生成的XML中,从而中断反序列化。我最难解释的问题是,在生产中,某个XML值不会生成异常,而在dev中,我会得到一个异常。 在开发中,我从来没有看到额外的类提到。我可以通过删除字符串“”和关闭标记来“修复”这一点,但我想要理解。 实际上我并不关心在线交换的数据格式是什么。类名是否存在对我

  • 我想把这段代码添加到我的Java文件中: 但我不知道在哪。这是我的Java文件:包sherdle.donald.duck.app;导入android.app.activity;导入Android.os.bundle;导入Android.View.Window;导入android.webkit.webchromeclient;导入android.webkit.webview;导入Android.We

  • 严重程度代码说明项目文件行列警告CS1998此异步方法缺少await操作符,将同步运行。考虑使用'await'运算符来等待非阻塞API调用,或者使用'await task.run(...)'在后台线程上执行CPU绑定的工作。ImageParser C:\users\johny\documents\visual Studio 2015\projects\ImageParser\imdbsample\

  • 请谁能帮助我确定哪些CMS这些网站正在使用?我如何为自己建立同样的博客。我该用哪种技术。 网站链接:https://www.creativebloq.com/https://www.pcgamer.com/