PHP:如何强制simplexml为节点使用特定的数据类型

PHP:如何强制simplexml为节点使用特定的数据类型,php,xml,xml-parsing,simplexml,Php,Xml,Xml Parsing,Simplexml,如何强制simplexml_load_string()在每个节点使用相同的数据结构 $xml = " <level1> <level2> <level3>Hello</level3> <level3>stackoverflow</level3> </level2> <level2> <level3>My problem</level3&g

如何强制simplexml_load_string()在每个节点使用相同的数据结构

$xml = "
<level1>
  <level2>
    <level3>Hello</level3>
    <level3>stackoverflow</level3>
  </level2>
  <level2>
    <level3>My problem</level3>
  </level2>
</level1>";

$xmlObj = simplexml_load_string($xml)
var_dump($xmlObj);
当xml字符串中总是有多个子节点时,
doSomething()
工作正常。如果
只有一个子
节点,则会出现关于尝试获取非对象属性的错误

var_dump显示数据类型随对象和数组的变化而变化,这取决于嵌套在其中的节点数量

我更喜欢一种方法来确保
始终是一个数组,而不管其中有多少子元素。这样我就不用编辑太多了。但任何其他的出路都足够了


谢谢

这不是XML本身提供的信息。因此,您必须将其添加到实现中。SimpleXML提供对子元素的列表和项访问。如果您以列表的形式访问它(例如使用foreach),它将提供所有匹配的子元素

$xml = "
<level1>
  <level2>
    <level3>Hello</level3>
    <level3>stackoverflow</level3>
  </level2>
  <level2>
    <level3>My problem</level3>
  </level2>
</level1>";

$level1 = new SimpleXMLElement($xml);

$result = [];
foreach($level1->level2 as $level2) {
    $data2 = [];
    foreach ($level2->level3 as $level3) {
        $data2[] = (string)$level3;
    }
    $result[] = $data2;
}

var_dump($result);
$xml=”
你好
栈溢出
我的问题
";
$level1=新的simplexmlement($xml);
$result=[];
foreach($level1->level2为$level2){
$data2=[];
foreach($level2->level3为$level3){
$data2[]=(字符串)$level3;
}
$result[]=$data2;
}
var_dump($结果);

因此,诀窍是直接使用SimpleXMLElement实例,而不是将其转换为数组。不要将JSON结构的创建视为通用转换。使用SimpleXML读取XML时建立特定的输出。

这不是XML本身可用的信息。因此,您必须将其添加到实现中。SimpleXML提供对子元素的列表和项访问。如果您以列表的形式访问它(例如使用foreach),它将提供所有匹配的子元素

$xml = "
<level1>
  <level2>
    <level3>Hello</level3>
    <level3>stackoverflow</level3>
  </level2>
  <level2>
    <level3>My problem</level3>
  </level2>
</level1>";

$level1 = new SimpleXMLElement($xml);

$result = [];
foreach($level1->level2 as $level2) {
    $data2 = [];
    foreach ($level2->level3 as $level3) {
        $data2[] = (string)$level3;
    }
    $result[] = $data2;
}

var_dump($result);
$xml=”
你好
栈溢出
我的问题
";
$level1=新的simplexmlement($xml);
$result=[];
foreach($level1->level2为$level2){
$data2=[];
foreach($level2->level3为$level3){
$data2[]=(字符串)$level3;
}
$result[]=$data2;
}
var_dump($结果);

因此,诀窍是直接使用SimpleXMLElement实例,而不是将其转换为数组。不要将JSON结构的创建视为通用转换。使用SimpleXML读取XML时建立特定的输出。

忽略
var\u dump
的输出,因为这不会完全显示对象层次结构。如果你添加了代码并在那里显示问题所在,那么应该很容易解决。你是如何检查级别2的?你也应该在你的帖子中包含这一点。那种
var\u dump
和/或
print\u r
有时会误导你,你不是在找这个吗@Rolf为什么要把它转换成JSON?这就是我问的原因。只是有点开箱思考。忽略
var\u dump
的输出,因为这并不能完全显示对象层次结构。如果你添加了代码并在那里显示问题所在,那么应该很容易解决。你是如何检查级别2的?你也应该在你的帖子中包含这一点。那种
var\u dump
和/或
print\u r
有时会误导你,你不是在找这个吗@Rolf为什么要把它转换成JSON?这就是我问的原因。只是有点开箱思考。