目前有一个从XML文件创建的数组,然后我在array_slice中显示数组的最后200个...我很确定我在这个代码中有任何错误(注意我不是从0开始bcz它是一个空节点):
$xml_get = 'filename.xml'
$xml_array = json_decode(json_encode($xml_get), 1);
$master = $xml_array['unit'];
// Show Last 200
$master = array_slice($master, 1, 200);
foreach(array_reverse($master) as $arc)
{
$last_id = $arc['@attributes']['id'];
$last_data = $arc['data'];
$last_link = $arc['link'];
// Do stuff with values...
}
我想要做的是能够启动数组@属性(节点)并在它之前显示100。我的意图是使用url属性:address.com/blah/index.php#9439580作为start @attribute的值......
...但经过多次搜索,不确定从哪里开始使用数组。不确定我是否需要对其进行分块或如何在特定属性处启动数组。
使用XML示例进行更新:
<archive>
<unit id="929495820">
<data>Blah</data>
<link>url</link>
</unit>
<unit id="929495821">
<data>Blah</data>
<link>url</link>
</unit>
</archive>
答案 0 :(得分:0)
不要将XML转换为JSON。你没有使用Xpath的可能性。
$xml = <<<'XML'
<list>
<item id="1"><data>One</data></item>
<item id="2"><data>Two</data></item>
<item id="3"><data>Three</data></item>
<item id="4"><data>Four</data></item>
<item id="5"><data>Five</data></item>
<item id="6"><data>Six</data></item>
</list>
XML;
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$expression = '//item[@id=4]|//item[@id=4]/preceding-sibling::item[position() < 3]';
foreach ($xpath->evaluate($expression) as $item) {
var_dump(
[
'id' => $item->getAttribute('id'),
'data' => $xpath->evaluate('string(data)', $item)
]
);
}
输出:
array(2) {
["id"]=>
string(1) "2"
["data"]=>
string(3) "Two"
}
array(2) {
["id"]=>
string(1) "3"
["data"]=>
string(5) "Three"
}
array(2) {
["id"]=>
string(1) "4"
["data"]=>
string(4) "Four"
}
item
元素节点//item
item
属性等于id
的所有4
元素节点... //item[@id = 4]
item
个节点具有相同的父节点... //item[@id = 4]/preceding-sibling::item
//item[@id = 4]/preceding-sibling::item[position() < 3]
Xpath表达式充当过滤器,可以与|
结合使用。该示例使用第一个表达式来过滤标记节点本身,第二个表达式用于过滤其前一个兄弟节点。