PHP:如何强制simplexml为节点使用特定的数据类型
如何强制simplexml_load_string()在每个节点使用相同的数据结构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
$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?这就是我问的原因。只是有点开箱思考。