SimpleXml如何在新创建的根元素中附加现有XML

时间:2013-04-02 08:38:29

标签: php xml-parsing

我有一些来自服务器的XML响应,但它们没有root元素,因为我无法使用新的SimpleXML解析它们,所以我需要创建一个根元素然后添加所有这些xml到这个创建了根元素

 $res = bill_curl('GetAccounts'); //getting a list of accounts WITHOUT the <root> xml
 $xml = new SimpleXMLElement("<root></root>"); // creating a root element
 $xml->addChild($res); // adding to the <root> childrens

但问题是:

1)"<!--?xml version="1.0" encoding="UTF-8"?-->"保持在内部,同样位于文档的顶部

2)得到一些像“&lt;”,“/&gt;”这样的符号如何删除它们?

更新

  <document>
              <answer>
            <account>12345678</account>
            <info>someinfo</info>
            </answer>
             <answer>
            <account>23456789</account>
        <info>some info</info>
           </answer>
   </document>

这是我在字符串操作之后得到的,然后我做了:

$xml = new SimpleXMLElement($str);

这里我得到一个错误的开始和结束标签不匹配,我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我并不是特别热衷于这种解决方案的脆弱性。但是,听起来你正在整合有缺陷的API,所以我建议一些基本的字符串操作来获得你想要的东西:

$str = '<?xml version="1.0" encoding="UTF-8"?><testing>2</testing><test2>1</test2>';
// the above was a test string to represent the results of the below:
$str = bill_curl('GetAccounts');

// Switch the search string below with the actual doctype you're getting from the API.
// It looks to have been commented out in your question which may or may not be the case.
$str = str_replace('<?xml version="1.0" encoding="UTF-8"?>', '', $str);
$str = '<root>'.$str.'</root>';

$xml = new SimpleXMLElement($str);
var_dump($xml);