检查xml是否有root标记

时间:2015-02-13 16:01:17

标签: php regex xml

我正在尝试检查一块xml是否有根标记。 例如

<xml>
  <test>test</test>
</xml>

时应视为有效
<test>test</test>

应视为无效。

应该按原样处理第一个示例,而第二个示例应该包含在<helper></helper>个标记内。

在PHP中检查这个问题的最佳方法是什么,我一直在考虑使用正则表达式,但我真的不知道正则表达式应该是什么,如果我们这样做的话还要考虑标签可以有属性。

编辑:我使用simplexml_load_string将字符串与XML流媒体一起加载,问题是XML流媒体当时会刮掉xml文件1标记。

当我有一个像:

这样的文件时
<xml>
  <name attr="test">Archcry</name>
  <test>
    <name>Archcry</name>
    <moreinfo>more info goes here</moreInfo>
  </test>
</xml>

我得到的样子如下:

<name attr="test">Archcry</name>

<test>
  <name>Archcry</name>
  <moreinfo>more info goes here</moreInfo>
</test>

第二段代码可以通过simplexml_load_string运行就好了。 但是我想在第一部分添加帮助标签,否则我不会得到一个好的xml对象来使用

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

要确定XML字符串是否具有根节点,您可以使用simplexml类。 出于您的目的,您可以使用children方法:

$string ="<test>test</test>";
// $string ="<xml><test>test</test></xml>";
$xml = simplexml_load_string($string);
if(count($xml->children() == 0) {
  echo "<helper>".$xml->asXML()."</helper>";
} else {
  // has root element;
}