单个XML记录集中可以有一个或多个类似的XML标记。如果有很多,我需要它们在一个标签中,以逗号分隔。 这是我现在的XML。
<?xml version="1.0"?>
<Results>
<Recordset setCount="3">
<Record setEntry="0">
<AU>One</AU>
<AU>Two</AU>
<AU>three</AU>
</Record>
<Record setEntry="1">
<AU>One</AU>
<AU>Two</AU>
<AU>Three</AU>
<AU>Four</AU>
<AU>Five</AU>
<AU>Six</AU>
<AU>Seven</AU>
</Record>
<Record setEntry="2">
<AU>One</AU>
</Record>
</Recordset>
</Results>
我需要它像这样。请帮忙查一下代码。
<?xml version="1.0"?>
<Results>
<Recordset setCount="3">
<Record setEntry="0">
<AU>One, Two, Three</AU>
</Record>
<Record setEntry="1">
<AU>One, Two, Three, Four, Five, Six, Seven</AU>
</Record>
<Record setEntry="2">
<AU>One</AU>
</Record>
</Recordset>
</Results>
答案 0 :(得分:0)
这可以使用xpath完成。以下是 Simplexml 的示例:
您可以先找到所有第一片叶子:
foreach ($xml->xpath('//*[not(*) and not(preceding-sibling::*)]') as $firstLeaf) {
...
}
然后你将文本与以下所有叶子连在一起:
$followingWithSameName = 'following-sibling::*[name(.) = name(preceding-sibling::*[last()])]';
// change the text of the first leaf
$firstLeaf[0] = implode(', ', $firstLeaf->xpath(".|$followingWithSameName"));
然后删除以下所有叶子:
// remove all following leafs with the same name
foreach ($firstLeaf->xpath($followingWithSameName) as $leaf) {
unset($leaf[0]);
}