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
函式 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 = '屬性的新值';
?>
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.dev.org.tw/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 標籤中定義的特定屬性/值條件時,使用屬性來顯示。

使用屬性(atributos)在符合 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