微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何短语/分解 XML 数据?

如何解决如何短语/分解 XML 数据?

我正在尝试从 xml 文件创建打印机墨水店。

在 XML 中有 ID、名称、类别和描述。在Toner pasuje do drukarek: 之后和Pokrewne kody: 之前的描述中,列出了适合墨水的打印机型号(每个打印机名称都以制造商名称开头(例如佳能,惠普,兄弟))。我想对这些打印机进行措辞,并一次列出一台。

<offers>
   <offer>
      <id>37</id>
      <name>
      Toner zamiennik 12a do hp (q2612a) (czarny) - darmowa dostawa w 24h
      </name>
      <description>
      Toner Zamiennik 12A do HP (Q2612A) (Czarny) Toner pasuje do drukarek:HP LaserJet 1010HP LaserJet 1022 NHP LaserJet 3052HP LaserJet 1012HP LaserJet 1022 NWHP LaserJet 3055HP LaserJet 1015HP LaserJet 3015HP LaserJet M1005 MFPHP LaserJet 1018HP LaserJet 3020HP LaserJet M1300 MFPHP LaserJet 1020HP LaserJet 3030HP LaserJet M1319 F MFPHP LaserJet 1020 PlusHP LaserJet 3050HP LaserJet 1022HP LaserJet 3050 ZPokrewne kody: Toner,Tonery,Q2612A,12A,DT-TH-12A,DrTusz,Hewlett Packard,HP Kod EAN: 5902811000000
      </description>
      <shopcategory>Wkłady -> Laserowe -> Zamienniki -> Tonery</shopcategory>
  </offer>
  <offer>
      <id>38</id>
      <name>
      Toner zamiennik 06a do Canon (c3906a) (czarny) - darmowa dostawa w 24h
      </name>
      <description>
      Toner Zamiennik 06A do Canon (C3906A) (Czarny) Toner pasuje do drukarek:Canon LaserJet 3100Canon LaserJet 3150 XICanon LaserJet 6 L ProCanon LaserJet 3100 SECanon LaserJet 5 LCanon LaserJet 6 L SECanon LaserJet 3100 XICanon LaserJet 5 L XtraCanon LaserJet 6 L XICanon LaserJet 3150Canon LaserJet 5 LFSCanon LaserJet 3150 SECanon LaserJet 6 LPokrewne kody: Toner,C3906A,06A,DT-TH-06A,Canon Kod EAN: 5902811000086          </description>
      <shopcategory>Wkłady -> Laserowe -> Zamienniki -> Tonery</shopcategory>
</offer>
</offers>

示例

说明是

<description>
      Toner Zamiennik 12A do HP (Q2612A) (Czarny) Toner pasuje do drukarek:HP LaserJet 1010HP LaserJet 1022 NHP LaserJet 3052HP LaserJet 1012Pokrewne kody: Toner,HP Kod EAN: 5902811000000
      </description>

我想要改变

HP LaserJet 1010HP LaserJet 1022 NHP LaserJet 3052HP LaserJet 1012

<printer>HP LaserJet 1010</printer>
<printer>HP LaserJet 1022 N</printer>
<printer>HP LaserJet 3052</printer>
<printer>HP LaserJet 1012</printer>

我该怎么做(例如在 PHP 中)?

谢谢

解决方法

您可以通过以下步骤解析描述:

算法

  • 找到 "Toner pasuje do drukarek:""Pokrewne kody" 之间的子串
  • 查找子字符串中的第一个单词以获得brand
  • brand分割子串
  • 删除第一个元素(它将为空)
  • 将品牌置于每个拆分元素之前

代码

$start = 'Toner pasuje do drukarek:';
$end = 'Pokrewne kody';

$descriptions = [...];

$printers = [];
foreach ($descriptions as $description) {
    $startIndex = strpos($description,$start) + strlen($start);
    $endIndex = strpos($description,$end);
    $length = $endIndex - $startIndex;
    $printersAsText = substr($description,$startIndex,$length);
    $firstWord = explode(' ',$printersAsText)[0];
    $printer = explode($firstWord,$printersAsText);
    array_shift($printer);

    $printers[] = array_map(function ($e) use ($firstWord) { return $firstWord . $e; },$printer);
}

print_r($printers);

工作example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。