PHP Conference Japan 2024

SimpleXMLElement::attributes

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::attributes标识元素的属性

描述

public SimpleXMLElement::attributes(?string $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElement

此函数提供在 xml 标签中定义的属性和值。

注意: SimpleXML 规定为大多数方法添加迭代属性。无法使用 var_dump() 或任何其他可以检查对象的工具来查看它们。

参数

namespaceOrPrefix

检索属性的可选命名空间

isPrefix

默认为 false

返回值

返回一个 SimpleXMLElement 对象,可以对其进行迭代以循环遍历标签上的属性。

如果在已经表示属性而不是标签的 SimpleXMLElement 对象上调用,则返回 null

示例

示例 #1 解释 XML 字符串

<?php
$string
= <<<XML
<a>
<foo name="one" game="lonely">1</foo>
</a>
XML;

$xml = simplexml_load_string($string);
foreach(
$xml->foo[0]->attributes() as $a => $b) {
echo
$a,'="',$b,"\"\n";
}
?>

以上示例将输出

name="one"
game="lonely"

添加注释

用户贡献的注释 6 个注释

Xeoncross
14 年前
使用数组形式访问属性非常简单。但是,如果您计划将值传递给函数,则必须将它们转换为字符串或整数。

<?php
SimpleXMLElement 对象
(
[@
attributes] => 数组
(
[
id] => 55555
)

[
text] => "hello world"
)
?>

然后使用一个函数

<?php
function xml_attribute($object, $attribute)
{
if(isset(
$object[$attribute]))
return (string)
$object[$attribute];
}
?>

我可以这样获取“id”

<?php
print xml_attribute($xml, 'id'); // 输出 "55555"
?>
chris at chlab dot ch
12 年前
请注意,如果您想访问非默认命名空间的属性,则必须提供命名空间。

考虑以下示例

<?php
$xml
= <<<XML
<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<Table Foo="Bar" ss:ExpandedColumnCount="7">
</Table>
</Workbook>
XML;

$sxml = new SimpleXMLElement($xml);

/**
* 访问默认命名空间的属性
*/
var_dump((string) $sxml->Table[0]['Foo']);
// 输出:'Bar'

/**
* 访问非默认命名空间的属性
*/
var_dump((int) $sxml->Table[0]['ExpandedColumnCount']);
// 输出:0

var_dump((int) $sxml->Table[0]->attributes('ss', TRUE)->ExpandedColumnCount);
// 输出:'7'
?>
sarlak
13 年前
<?php
$att
= 'attribueName';

// 你可以这样访问元素的属性:
$attribute = $element->attributes()->$att;

// 这将保存属性的值,而不是对象
$attribute = (string)$element->attributes()->$att;

// 你也可以这样编辑它:
$element->attributes()->$att = 'New value of the attribute';
?>
totalwipeout at gmail dot com
12 年前
获取节点所有属性的真实数组的技巧(不是充当数组的 SimpleXML 对象)

<?php
//- $node 是一个 SimpleXMLElement 对象

$atts_object = $node->attributes(); //- 获取所有属性,这不是一个真正的数组
$atts_array = (array) $atts_object; //- 类型转换为数组

//- 获取“@attributes”键的值,其中包含您想要的数组
$atts_array = $atts_array['@attributes'];

var_dump($atts_object); //- 输出 object(SimpleXMLElement)[19]
//- public '@attributes' => ...

var_dump($atts_array); //- 输出 array (size=11) ...

?>
希望这有帮助!
andy dot locologic+101 at gmail dot com
9 年前
获取属性作为数组最简单和最安全的方法是使用 iterator_to_array 函数(参见 https://php.net/manual/en/function.iterator-to-array.php

<?php
$x
= new SimpleXMLElement('<div class="myclass" id="myid"/>');
$attributes = iterator_to_array($x->attributes());
?>
webfelipemaia at gmail dot com
11年前
使用属性在满足XML标签中定义的特定条件(属性/值)时进行显示。

使用属性来显示当满足XML标签中定义的特定属性/值条件时的情况。

考虑以下示例
考虑以下示例

(file.xml)

<?xml version="1.0" encoding="UTF-8"?>

<list>
<item type="Language">
<name>PHP</name>
<link>www.php.net</link>
</item>
<item type="Database">
<name>Java</name>
<link>www.oracle.com/br/technologies/java/‎</link>
</item>
</list>

检查属性值是否等于“Language”,如果相等,则打印所有与“Language”相关的内容。

检查属性值是否等于“Language”,如果是,则打印所有与其相关的内容。

<?php

$xml
= simplexml_load_file("file.xml");

foreach(
$xml->children() as $child) {

$role = $child->attributes();

foreach(
$child as $key => $value) {

if(
$role == "Language")
echo(
"[".$key ."] ".$value . "<br />");

}
}
?>

输出
输出

[name] PHP
[link] www.php.net
To Top