使用php解析成另一个包含xml子节点的数组

时间:2018-05-24 14:45:58

标签: javascript php xml

目前,我在使用条件解析数组中的xml节点时遇到问题,其中使用<mo>作为分隔符进行解析

这是我的数组(0)

Array([0] => <mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>);

我想像这样解析

Array[0] => <mi>x</mi>
Array[1] =><mo>+</mo><mn>2</mn>
Array[2]=><mo>=</mo><mn>3</mn>

这是我的编码

&#13;
&#13;
<?
$result(0)="<mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>";
$result1= new simplexml_load_string($result);
$arr_result=[];
foreach($result1 as $key => $value){
     $exp_key = explode('<', $key);
    if($key[0] == 'mo'){
         $arr_result[] = $value;
    }
print_r($arr_result);
}


if(isset($arr_result)){
    print_r($arr_result);
}
?>
&#13;
&#13;
&#13;

提前感谢!

1 个答案:

答案 0 :(得分:0)

使用XML的方法似乎过多,因为您真正想要的是根据分隔符提取字符串的子字符串。

这是一个工作示例。它的工作原理是找到<mo>的位置并切断该部分,然后搜索剩余字符串中的下一个<mo>

<?php
$result(0)="<mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>";
$res = $result(0);
$arr_result=[];
while($pos = strpos($res, "<mo>", 1)) {
    $arr_result[] = substr($res, 0, $pos); // grab first match
    $res = substr($res, $pos); // grab the remaining string
}
$arr_result[] = $res; // add last chunk of string

print_r($arr_result);

?>

上面的代码有几个问题。 第一:

$result1= new simplexml_load_string($result); // simplexml_load_string() is a function not a class

第二

$key$value不包含'&lt;'和'&gt;'所以,这部分: $exp_key = explode('<', $key);永远不会做任何事情而且不需要。

第三

如果您的代码确实有效,那么它只会返回array('+', '='),因为您要将mo元素中的数据附加到结果数组中。