simplexml获取值,而不是所有属性


simplexml get value not all attributes

我对php不是很熟悉(刚开始学习),我遇到了一个问题:我在服务器上有一个xml文件(来自eve…但谁在乎呢),我设法让它"读取"了这个文件。它的结构是这样的:

<result>
     <rowset>
          <row name="abc" id="def" ...>
          <row name="abc" id="def" ...>
          <row name="abc" id="def" ...>
          ...
     </rowset>
</result>

在搜索一些网页时,我发现了一种方法来回显所有行的所有属性。这是我的代码:

<?php
$url = "http://api.eveonline.com/eve/AllianceList.xml.aspx?version=1";
$xml = simplexml_load_file($url);
$nrOfRows = $xml->result[0]->rowset[0]->count();
$n = 0;
for ($n = 0; $n <= $nrOfRows; $n++) {
    foreach($xml->result[0]->rowset[0]->row[$n]->attributes() as $a => $b) {
        echo $a, " = ", $b, "<br>";
    }
}
?>

结果我得到:

name = abc
id = def
...
name = abc
id = def
...

这看起来不错,但这不是我想要的。我只需要所有行的一个特殊属性。例如,我想要所有行的所有名称作为结果。

谢谢你的帮助。sariel

您可以使用数组语法访问单个属性:

echo $xml->result[0]->rowset[0]->row[$n]['name'];

将输出:

Goonswarm Federation
Pandemic Horde
Test Alliance Please Ignore
(...)

还要注意,您可以通过以下方式简化代码:

foreach( $xml->result[0]->rowset[0]->row as $row )
{
    echo $row['name'] . '<br>';
}

下面是一个使用内置DOMDocument和DOMXpath类的示例

$xml = <<< LOL
<result>
     <rowset>
          <row name="abc" id="def" lang="pt">Olá</row>
          <row name="abc" id="def" lang="en">Hello</row>
          <row name="abc" id="def" lang="fr">Bonjour</row>
     </rowset>
</result>
LOL;
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);
foreach ($xpath->query("//row") as $row){
    echo $row->getAttribute('name');
    echo $row->getAttribute('id');
    echo $row->getAttribute('lang');
    echo $row->textContent;
}

上面的示例将获得每个行元素的nameidlang属性和文本text

Ideone演示


如果需要按idclass筛选行,请使用;

$xpath->query("//row[@class='someClass']")
$xpath->query("//row[@id='someId']")