【问题标题】:Find Unique Tags in an XML file在 XML 文件中查找唯一标签
【发布时间】:2013-07-06 20:24:44
【问题描述】:

我有一个 XML 文件,其中包含标签 <image_file_name>,此标签重复,有时此值重复,我正在尝试查找 <image_file_name> 的唯一实例值的总数。

$simpleXML = simplexml_load_file("stock_availability.xml");

$uniqueProducts = array();

foreach ($simpleXML->product as $product) {
    $image_file_name = $product->image_file_name;
    if(in_array($image_file_name, $uniqueProducts)) {
        echo 1;
    } else {
        $uniqueProducts[] = $image_file_name;
        echo 2;
    }
$image_file_name = null;
}

echo count($uniqueProducts);

count() 返回image_file_name 非唯一实例的实例总数。

2 也会连续回显,1 永远不会回显。

【问题讨论】:

  • 我认为这是因为您犯了一个小错误,您需要先将 simlexmlelement 转换为字符串,以便获得可用于检查唯一性的值。否则,您将一直在寻找唯一的 simplexmlelement。但是表示它的元素值的字符串不是唯一的。 $image_file_name = (string) $product->image_file_name; - 在寻找此类错误时,请注意故障排除,仔细检查各个点的预期。
  • @hakre 谢谢你修复了它

标签: php xml foreach


【解决方案1】:

我已经盯着您的代码看了几分钟,没有发现问题。我认为您使用了 print_r($uniqueProducts) 并在输出中发现了重复项。

您是否检查了其他重复条目中的空格或大小写差异? 尝试使用一些标准化 - 例如使用 strtoupper(trim()) 和引号。

例如:

$simpleXML = simplexml_load_file("stock_availability.xml");

$uniqueProducts = array();

foreach ($simpleXML->product as $product) {
    $image_file_name = $product->image_file_name;
    $dup_check=strtoupper(trim($image_file_name));
    if(in_array("$dup_check", $uniqueProducts)) {
        echo 1;
    } else {
        $uniqueProducts[] = "$dup_check";
        echo 2;
    }
$image_file_name = null;
}

print_r($uniqueProducts);
echo "<br>".count($uniqueProducts);

看看这是否有帮助。

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 2017-02-13
    • 2012-10-26
    • 1970-01-01
    • 2014-04-22
    • 2020-06-11
    • 1970-01-01
    • 2012-11-04
    • 2018-05-08
    相关资源
    最近更新 更多