xml 标签带有符号php,php-如果元素每个记录有相似的标记,则获取正确的xml值

这篇博客讨论了如何使用PHP的XMLReader和DOMDocument处理XML文件,特别是当XML记录中有重复的标记时,如何正确提取并输出到CSV。作者提供了一个脚本示例,该脚本读取XML文件,遍历包含'ABCRecord'的节点,并提取特定字段如'ABC'和'Entity/Name'。然而,脚本未能处理同一记录内的多个期间信息。博主寻求解决方案以获取每个期间的完整信息并正确导出到CSV。
摘要由CSDN通过智能技术生成

php-如果元素每个记录有相似的标记,则获取正确的xml值

我正在获取以下XML文件:

XML文件:

5EXZX4LPK

I Bornheim

2017-01-01

2017-12-31

ACCOUNTING

2007-09-01

RELATIONSHIP

5967007LI

SUN BANK

2018-01-01

2018-12-31

BALANCED

2008-09-01

PARENT

…使用此脚本,我将值输出为csv:

PHP文件:

$reader = new XMLReader();

$reader->open('php://stdin');

$output = fopen('php://stdout', 'w');

fputcsv($output, ['id', 'name']);

$xmlns = [

'abc' => 'http://www.abc-example.com'

];

$dom = new DOMDocument;

$xpath = new DOMXpath($dom);

foreach ($xmlns as $prefix => $namespaceURI) {

$xpath->registerNamespace($prefix, $namespaceURI);

}

while (

$reader->read() &&

(

$reader->localName !== 'ABCRecord' ||

$reader->namespaceURI !== $xmlns['abc']

)

) {

continue;

}

while ($reader->localName === 'ABCRecord') {

if ($reader->namespaceURI === 'http://www.abc-example.com') {

$node = $reader->expand($dom);

fputcsv(

$output,

[

$xpath->evaluate('string(abc:ABC)', $node),

$xpath->evaluate('string(abc:Entity/abc:Name)', $node)

]

);

}

$reader->next('ABCRecord');

}

…这样地:

输出:

5EXZX4LPK,"I Bornheim"

5967007LI,"SUN BANK"

然而…如果每个期间记录具有相同的标记定义,如何获取正确的“期间”值?

期望输出:

5EXZX4LPK,"I Bornheim",2017-01-01,2017-12-31,"ACCOUNTING",2007-09-01,"RELATIONSHIP"

5967007LI,"SUN BANK",2018-01-01,2018-12-31,"BALANCED",2008-09-01,"PARENT"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值