PHP Velho Oeste 2024

XMLWriter::writeAttribute

xmlwriter_write_attribute

(PHP 5 >= 5.1.2, PHP 7, PECL xmlwriter >= 0.1.0)

XMLWriter::writeAttribute -- xmlwriter_write_attribute属性全体を書き込む

説明

オブジェクト指向型

XMLWriter::writeAttribute ( string $name , string $value ) : bool

手続き型

xmlwriter_write_attribute ( resource $xmlwriter , string $name , string $value ) : bool

属性全体を書き込みます。

パラメータ

xmlwriter

手続き型のコールでのみ使用します。 変更される XMLWriter resource です。 このリソースは、xmlwriter_open_uri() あるいは xmlwriter_open_memory() のコールによって取得したものです。

name

属性の名前。

value

属性の値。

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

例1 子要素と属性を混在させる

子要素と属性が混在した場合、最初の子要素より後に属性を書き込もうとしても失敗し、FALSE が返ります。

<?php
$xml 
= new XMLWriter();
$xml->openMemory();

$xml->startElement('element');
$xml->writeAttribute('attr1''0');
$xml->writeElement('subelem''0');
var_dump($xml->writeAttribute('attr2''0'));
$xml->endElement();

echo 
$xml->flush();
?>

上の例の出力は以下となります。

bool(false)
<element attr1="0"><subelem>0</subelem></element>

参考

add a note add a note

User Contributed Notes 2 notes

up
9
Paul
7 years ago
If you intermix writing sub-elements and attributes, any attempt to write attributes after the first sub-element will fail and return false:

<?php
$xml
= new XMLWriter();
$xml->openMemory();

$xml->startElement('element');
$xml->writeAttribute('attr1', '0');
$xml->writeElement('subelem', '0');
var_dump($xml->writeAttribute('attr2', '0'));
$xml->endElement();

echo
$xml->flush();
?>

Outputs:

bool(false)
<element attr1="0"><subelem>0</subelem></element>

This is because this is a forward-only writer and the start tags are already finished. There is no going back to add more attributes later, there is no place to put attr2. This is exactly how it is supposed to work.
up
0
Jason Hughes
13 years ago
If you intermix writing sub-elements and attributes, any attributes that are written after the first sub-element are ignored/discarded:

<?php
$xml
->startElement('element');
 
$xml->writeAttribute('attr1', 0);
 
$xml->writeElement('subelem', 0);
 
$xml->writeAttribute('attr2', 0);
$xml->endElement();
?>

Outputs:

<element attr1=0>
  <subelem>0</subelem>
</element>

This is stupid, but the way it works as of PHP 5.2.4.
To Top