从 SimpleXML 访问@属性

我在访问 SimpleXML 对象的 @attribute部分时遇到了问题。当我 var_dump整个对象时,我得到了正确的输出,当我 var_dump剩下的对象(嵌套标记)时,我得到了正确的输出,但是当我跟随 docs 和 var_dump $xml->OFFICE->{'@attributes'}时,我得到了一个空对象,尽管第一个 var_dump清楚地显示了输出的属性。

有人知道我做错了什么吗/我怎样才能做到这一点?

165859 次浏览

可以通过调用 XML 节点上的 properties ()函数来获取 XML 元素的属性。然后您可以 var _ dump 函数的返回值。

更多信息请访问 php.net Http://php.net/simplexmlelement.attributes

该页面的示例代码:

$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
echo $a,'="',$b,"\"\n";
}
$xml = <<<XML
<root>
<elem attrib="value" />
</root>
XML;


$sxml = simplexml_load_string($xml);
$attrs = $sxml->elem->attributes();
echo $attrs["attrib"]; //or just $sxml->elem["attrib"]

使用 SimpleXMLElement::attributes

事实上,SimpleXMLElement get_properties处理程序占用了大量时间,因为没有名为“@properties”的属性,所以不能执行 $sxml->elem->{"@attributes"}["attrib"]

你可以这样做:

echo $xml['token'];

如果您正在寻找这些属性的列表,那么 XPath 将是您的朋友

print_r($xml->xpath('@token'));

试试这个

$xml->attributes()->Token

我以前使用这么多次,以获得像下面的 @attributes,它是一个有点长。

$att = $xml->attributes();
echo $att['field'];

这应该更容易,你可以得到属性下面的格式只有一次:

标准方法-数组-访问属性(AAA)

$xml['field'];

其他选择包括:

正确及快速格式

$xml->attributes()->{'field'};

错误的格式

$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];

不幸的是,我有一个独特的 PHP 5.5版本(目前还停留在 Gentoo) ,我发现

 $xml->tagName['attribute']

是唯一有效的解决办法。我尝试了 Bora 以上的所有方法,包括“正确 & 快速”格式,但都失败了。

事实上,这是最简单的格式是一个加分,但不喜欢认为我是疯了尝试所有格式,其他人说工作。

享受它的价值(我有没有提到独特的建设?)。

它帮助我将 simplexml _ load _ file ($file)的结果转换为 JSON 结构并将其解码回来:

$xml = simplexml_load_file("$token.xml");
$json = json_encode($xml);
$xml_fixed = json_decode($json);


$try1 = $xml->structure->{"@attributes"}['value'];
print_r($try1);


>> result: SimpleXMLElement Object
(
)


$try2 = $xml_fixed->structure->{"@attributes"}['value'];
print_r($try2);


>> result: stdClass Object
(
[key] => value
)

我想从外部 xml 文件中提取字符串(只有歌曲标题和艺术家名称) : < a href = “ https://怀旧 icfm.ro/NowOnAir.xml”rel = “ nofollow noReferrer”> https://nostalgicfm.ro/nowonair.xml Xml 的这种形式:

 <Schedule System="Jazler">
<Event status="happening" startTime="20:31:20" eventType="song">
<Announcement Display=""/>
<Song title="Let It Be ">
<Artist name="Beatles">
<Media runTime="265.186"/>
<Expire Time="20:35:45"/>
</Artist>
</Song>
</Event>
</Schedule>

我尝试这个代码 PHP,但我不知道如何提取名称和标题... 像“披头士-让它是”

  <?php
$url = "https://nostalgicfm.ro/NowOnAir.xml";
$xml = simplexml_load_file($url);
print_r($xml);
?>

结果是一个对象:

 SimpleXMLElement Object ( [@attributes] => Array ( [System] => Jazler ) [Event] => SimpleXMLElement Object ( [@attributes] => Array ( [status] => happening [startTime] => 20:51:21 [eventType] => song ) [Announcement] => SimpleXMLElement Object ( [@attributes] => Array ( [Display] => ) ) [Song] => SimpleXMLElement Object ( [@attributes] => Array ( [title] => If You Were A Sailboat ) [Artist] => SimpleXMLElement Object ( [@attributes] => Array ( [name] => Katie Melua ) [Media] => SimpleXMLElement Object ( [@attributes] => Array ( [runTime] => 228.732 ) ) [Expire] => SimpleXMLElement Object ( [@attributes] => Array ( [Time] => 20:55:09 ) ) ) ) ) )

我自己解决了:

<?php
$url = 'https://nostalgicfm.ro/NowOnAir.xml';
$xml = simplexml_load_file($url);
foreach ( $xml->Event->Song->Artist->attributes() as $tag => $value );
foreach ( $xml->Event->Song->attributes() as $tag => $value1 ) {
echo $value." - ".$value1.PHP_EOL; }
?>