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"