访问 SimpleXML 中的 @attribute

11 浏览
0 Comments

访问 SimpleXML 中的 @attribute

我无法访问我的SimpleXML对象中的@attribute部分,遇到了问题。当我使用var_dump打印整个对象时,输出是正确的,当我打印对象的其余部分(嵌套标签)时,输出也是正确的。但是,当我按照文档中的方法使用var_dump $xml->OFFICE->{\'@attributes\'}时,我得到了一个空对象,尽管第一个var_dump清楚地显示存在要输出的属性。\n有人知道我在这里做错了什么/如何使其正常工作吗?

0
0 Comments

在使用SimpleXML时,我之前经常使用以下的方式来获取属性,但是代码有点长:

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

它应该更简单,你只需要按照以下格式一次性获取属性:

标准方式 - 通过数组访问属性 (AAA)

$xml['field'];

其他的替代方式有:

正确且快速的格式

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

错误的格式

$xml->attributes()->field;
$xml->{""}->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只适用于属性名称是单个字母数字的情况。

在使用这两种正确的选项时,我得到的是SimpleXMLElement对象。

为了获取字符串而不是SimpleXMLElement对象,我不得不显式地进行类型转换,使用(string) $xml->attributes()['attr']

0
0 Comments

问题出现的原因是在通过attributes()函数获取XML元素的属性时,返回的属性值是一个SimpleXMLElement对象,而不是一个字符串。因此,使用print_r和var_dump函数输出属性值时会得到奇怪的结果。

解决方法是将属性值强制转换为字符串。可以使用"".$b的方式将SimpleXMLElement对象转换为字符串,并保持其作为字符串的形式。

以下是完整的

在SimpleXML中,通过调用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";
}

有趣的是,$b将是一个SimpleXMLElement对象,因此使用print_r和var_dump函数输出属性值时会得到奇怪的结果。为了解决这个问题,可以将其强制转换为字符串(或其他需要的类型)。

使用"".$b的方式可以将SimpleXMLElement对象转换为字符串,并保持其作为字符串的形式。

0
0 Comments

问题的原因是用户想要从SimpleXML对象中访问属性,但是他们不确定如何正确地进行访问。

解决方法是使用以下格式来访问属性:$xml->tag->attributes()->attr。其中,$xml是XML对象,tag是XML中的标签,attr是要访问的属性。

用户之所以认为这种访问属性的方式是错误的,可能是因为他们没有在正确的XML对象上调用attributes()方法。他们需要在与XML中正确标签对应的对象上调用attributes()方法才能成功访问属性。

还有一个用户遇到的问题是他们无法获取属性值,而是得到了一个包含0="2001"的SimpleXMLElement对象。这是因为他们没有正确地使用属性访问方法。正确的方法是在属性访问方法后面加上[0],如:$xml->Policy->CommlPolicy->CommlCoverage[0]->attributes()->id[0]。

另一个用户询问为什么这个答案不是被选择的答案。这可能是因为他们在寻找一个更准确的答案,而不是只是简单地访问属性。他们可以通过阅读相关文章来找到解决方案,并使用current($xml->attributes(current($xml->getNamespaces(true)))->noNamespaceSchemaLocation)来具体获取模式属性。

以上就是用户在访问SimpleXML对象的属性时遇到的问题的原因和解决方法。

0