simplexml 获取值不是所有属性
simplexml get value not all attributes
我对php不是很熟悉(刚刚开始学习),遇到问题:
我在服务器上有一个 xml 文件(从前夕...但谁在乎呢)我管理它到 "read" 这个文件。它的结构如下:
<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
...
这看起来不错,但那不是我想要的。
我只需要所有行的一个特殊属性。例如,我想要所有行的所有名称作为结果。
感谢您的帮助。
沙利尔
这是一个使用 DOMDocument and 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;
}
上面的例子将获取每个行元素的name
、id
、lang
属性和文本text
。
如果您需要按 id
或 class
筛选行,请使用;
$xpath->query("//row[@class='someClass']")
$xpath->query("//row[@id='someId']")
您可以使用数组语法访问单个属性:
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>';
}
我对php不是很熟悉(刚刚开始学习),遇到问题: 我在服务器上有一个 xml 文件(从前夕...但谁在乎呢)我管理它到 "read" 这个文件。它的结构如下:
<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
...
这看起来不错,但那不是我想要的。 我只需要所有行的一个特殊属性。例如,我想要所有行的所有名称作为结果。
感谢您的帮助。 沙利尔
这是一个使用 DOMDocument and 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;
}
上面的例子将获取每个行元素的name
、id
、lang
属性和文本text
。
如果您需要按 id
或 class
筛选行,请使用;
$xpath->query("//row[@class='someClass']")
$xpath->query("//row[@id='someId']")
您可以使用数组语法访问单个属性:
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>';
}