8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

从 SimpleXML 访问 @attribute

Johan Valstar 2月前

74 0

我在访问 SimpleXML 对象的 @attribute 部分时遇到问题。当我 var_dump 整个对象时,我得到了正确的输出,而当我 var_dump 对象的其余部分(嵌套的 t...

SimpleXML 对象的部分时 @attribute 遇到问题 var_dump 访问整个对象时,我得到了正确的输出,当我访问 var_dump 对象的其余部分(嵌套标签)时,我得到了正确的输出,但是当我按照文档和进行操作时 var_dump $xml->OFFICE->{'@attributes'} ,我得到了一个空对象,尽管第一个文档 var_dump 清楚地显示了要输出的属性。

有人知道我在这里做错了什么/我该如何做才能让它发挥作用吗?

帖子版权声明 1、本帖标题:从 SimpleXML 访问 @attribute
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Johan Valstar在本站《php》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 对于 SimpleXML,var_dump() 具有误导性。不要从字面上理解其输出。此外,您不能使用数组访问来访问属性吗?例如 $xml->OFFICE['MyAttribute']?

  • 如果要使用 ['@attributes'] 您需要先将 SimpleXMLElement 转换为数组

  • 您可以通过对 XML 节点调用 attribute() 函数来获取 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";
    }
    
  • 有趣的是,$b 将是一个 SimpleXMLElement 对象,因此 print_rand var_dump 会给出一些奇怪的东西。您可以将其转换为字符串(或任何您喜欢的字符串)来解决这个问题。

  • 尝试一下

    $xml->attributes()->Token
    
  • 我试过了,我觉得页面崩溃了。下面的 Bora 似乎认为这是一种错误的格式,我现在同意这一点。但是我看到这种(你的)格式被多次提及。我是不是错过了什么细微差别?

  • @GerardONeill,我不明白为什么 Bora 说这是访问属性的错误方式,它工作得相当完美。你可能忽略的是,你需要在与 XML 中正确的标签对应的对象上调用 attribute()。比如如果你有b然后您需要执行 $xml->tag->attributes()->attr 来访问它。

  • 对于我来说,这返回的是 null,可能不是因为答案是错误的,而是因为答案缺乏足够的解释以便我正确使用它。

  • asgs 2月前 0 只看Ta
    引用 10

    当我这样调用时 - 我没有得到属性值,我得到了包含 0=\'2001\' 的 SimpleXMLElement(2001 是我的值)。如果我使用 0 - $xml->Policy->CommlPolicy->CommlCoverage[0]->attributes()->id[0],那么我再次得到相同的 0=\'2001\'。那是什么?

  • zizo 2月前 0 只看Ta
    引用 11

    我之前用过很多次,得到的结果 @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'];
    
  • 我同意你的第一个错误格式,因为我遇到了页面崩溃——但是很多人声称这是可行的。对此有什么解释或细微差别吗?

  • \'错误格式\' 有效。我总是使用第一个例子。为什么它是错误的?

  • 从技术上讲,$xml->attributes()->{'field'}、$xml->attributes()->field 和 $f='field'; $xml->attributes()->$f; 是相同的。看不出为什么一个是正确的格式,而另一个是错误的。

  • $xml->attributes()->{'field'} 是正确的,因为在属性名称中使用特殊字符是安全的(即 \'data-attr\')。$xml->attributes()->field 仅适用于单个字母数字单词的属性

  • $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 处理程序撒了大谎。没有名为 \'@attributes\' 的属性,因此您无法执行 $sxml->elem->{"@attributes"}["attrib"] .

  • 感谢您解释为什么 SimpleXML 会以这种奇怪的方式(get_properties 处理程序)运行。非常有趣。

  • kba 2月前 0 只看Ta
    引用 18

    你可以这样做:

    echo $xml['token'];
    
  • 如果你正在寻找这些属性的列表,XPath 将会是你的好朋友

    print_r($xml->xpath('@token'));
    
  • 不幸的是,我有一个独特的 PHP 5.5 版本(目前停留在 Gentoo),我发现

     $xml->tagName['attribute']
    

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

    事实上,这是最简单的格式,这是一个优点,但我并不认为我疯了一样尝试其他人说有效的所有格式。

    享受它的价值(我是否提到过独特的构造?)。

返回
作者最近主题: