从SimpleXML访问@attribute

ben*_*njy 113 php xml simplexml

我在访问@attributeSimpleXML对象的部分时遇到问题.当我var_dump整个对象,我得到正确的输出,当我var_dump对象的其余部分(嵌套标签),我得到正确的输出,但当我按照文档var_dump $xml->OFFICE->{'@attributes'},我得到一个空对象,尽管事实上第一个var_dump清楚地表明有输出的属性.

任何人都知道我在这里做错了什么/我如何才能做到这一点?

zys*_*oft 126

试试这个

$xml->attributes()->Token
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是更难的形式 (42认同)
  • [@Artefacto](http://stackoverflow.com/a/3410579/367456) 已经回答了这个问题。 (2认同)
  • 是的,这是最优雅的解决方案. (2认同)
  • @GerardONeill,我不明白为什么Bora说它是访问属性的错误方式,它的工作非常完美.你可能缺少的是你需要在对应XML中正确标记的对象上调用`attributes()`.就像你有`<root> <tag attr ="a"> b </ tag> </ root>`那么你需要做`$ xml-> tag-> attributes() - > attr`来访问它. (2认同)

Nie*_*Bom 85

您可以通过调用XML节点上的attributes()函数来获取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";
}
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,`$ b`将是一个`SimpleXMLElement`对象,所以`print_r`和`var_dump`会给你带来奇怪的东西.你可以把它作为一个字符串(或任何你喜欢的东西)来解决它. (7认同)

Bor*_*ora 50

之前我曾经多次使用过这种情况@attributes,而且时间有点长.

$att = $xml->attributes();
echo $att['field'];
Run Code Online (Sandbox Code Playgroud)

它应该更容易,您可以一次只获取格式的属性:

标准方式 - 阵列访问属性(AAA)

$xml['field'];
Run Code Online (Sandbox Code Playgroud)

其他替代方案是:

正确和快速格式

$xml->attributes()->{'field'};
Run Code Online (Sandbox Code Playgroud)

错误的格式

$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];
Run Code Online (Sandbox Code Playgroud)

  • 从技术上讲,`$ xml-> attributes() - > {'field'}`,`$ xml-> attributes() - > field`和`$ f ='field'; $ xml-> attributes() - > $ f;`是一样的.看不出为什么一个是正确的格式而另一个是错的. (3认同)
  • $xml-&gt;attributes()-&gt;{'field'} 是正确的,因为在属性名称中使用特殊字符(即“data-attr”)是安全的。$xml-&gt;attributes()-&gt;field 仅适用于单个字母数字单词的属性 (3认同)

Art*_*cto 40

$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"]
Run Code Online (Sandbox Code Playgroud)

使用SimpleXMLElement::attributes.

事实是,SimpleXMLElement get_properties处理程序非常重要.没有名为"@attributes"的属性,所以你做不到$sxml->elem->{"@attributes"}["attrib"].


Ali*_*xel 15

你可以这样做:

echo $xml['token'];
Run Code Online (Sandbox Code Playgroud)


Cor*_*ier 7

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

print_r($xml->xpath('@token'));
Run Code Online (Sandbox Code Playgroud)


Ger*_*ill 5

不幸的是,我有一个独特的 PHP 5.5 版本(暂时使用 Gentoo),我发现

 $xml->tagName['attribute']
Run Code Online (Sandbox Code Playgroud)

是唯一有效的解决方案。我尝试了Bora上面的所有方法,包括“Right & Quick”格式,但都失败了。

事实上,这是最简单的格式是一个优点,但我不喜欢认为我疯狂地尝试其他人所说的所有格式。

很喜欢它的价值(我有没有提到独特的构建?)。