【问题标题】:How to change attribute of an XML element如何更改 XML 元素的属性
【发布时间】:2015-04-25 18:56:21
【问题描述】:

我对 XML 很陌生。我有一个包含大约 8000 种产品的 XML 文件,我会将这些产品导入我自己的系统。我想为我的进口商修改这个 XML 文件。原始 XML 文件的示例产品如下;

  <product prodID="PD42BJ1000002020" prodName="Intermec PD42" prodBrand="INTERMEC" globProdID="PD42BJ1000002020">
    <tax>KDV18</tax>
    <pic>http://.....jpg</pic>
    <prodSpec>
      <prd spec="Connectivity Interfaces" DEGER="USB - Serial RS232 - Ethernet"/>
      <prd spec="Print Width" DEGER="104"/>
      <prd spec="Printing Method" DEGER="Direct Thermal - Thermal Transfer"/>
      <prd spec="Resolution (DPI)" DEGER="203"/>
    </prodSpec>
  </product>

我想将产品规格更改为独特的元素,如下所示;

  <product prodID="PD42BJ1000002020" prodName="Intermec PD42" prodBrand="INTERMEC" globProdID="PD42BJ1000002020">
    <tax>KDV18</tax>
    <pic>http://.....jpg</pic>
      <pr001>Connectivity Interfaces:USB - Serial RS232 - Ethernet</pr001>
      <pr002>Print Width:104</pr002>
      <pr003>Printing Method:Direct Thermal - Thermal Transfer</pr003>
      <pr004>Resolution (DPI):203</pr004>
  </product>

是否可以像这样更改整个 XML 文档?

【问题讨论】:

  • 您能否向我们提供有关您必须使用或不使用的技术的任何线索(XSLT,纯编程语言,...)?
  • 您好,谢谢您的回答!我将使用 PHP 将 XML 导入 MySQL 数据库。需要的 PHP 代码是不同的属性集,例如 而不是 。我对 XML 很陌生,所以我不了解 XSLT:/
  • 我不懂 PHP,所以无法进一步帮助您。但是确实存在一些处理 XML 的库——我相信你可以在 stackoverflow 上找到一些有用的东西:stackoverflow.com/questions/tagged/xml+php

标签: php xml xml-parsing


【解决方案1】:

如果您不介意为此使用 Perl,这里有一种使用 XML::Twig 的方法:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

my $infile= shift @ARGV;

XML::Twig->new( twig_handlers => { prodSpec => \&tweak_product },
                pretty_print => 'indented',
              )
          ->parsefile( $infile);

exit;

sub tweak_product
  { my( $t, $prodspec)= @_;
    my $i=0;                                       # sub tag number 
    foreach my $prd ($prodspec->children( 'prd'))  
      { my $tag= sprintf( 'pr%03d', ++$i);
        $prd->set_tag( $tag)
            ->set_text( $prd->att( 'spec') . ':' . $prd->att( 'DEGER'))
            ->del_atts;
      }
    $prodspec->erase;
    $t->flush;
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多