PHP XML 在属性处启动数组,然后从数组切片开始



>目前有一个从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 作为起始@attribute的值......

。但是经过多次搜索,不确定从哪里开始使用数组。不确定我是否需要对其进行分块或如何在特定属性处启动数组。

使用 XML 示例进行更新:

<archive>
<unit id="929495820">
<data>Blah</data>
<link>url</link>
</unit>
<unit id="929495821">
<data>Blah</data>
<link>url</link>
</unit>
</archive>

不要为此将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"
}

Xpath 表达式

  • 任何item元素节点
    //item
  • 任何item元素节点,id属性等于4...
    //item[@id = 4]
  • 。其前面的item个节点具有相同的父节点...
    //item[@id = 4]/preceding-sibling::item
  • 。仅限 2 ...
    //item[@id = 4]/preceding-sibling::item[position() < 3]

Xpath 表达式充当过滤器,可以与|结合使用。该示例使用第一个表达式筛选标记节点本身,并使用第二个表达式筛选其前面的同级节点。

相关内容

最新更新