PHP使用simplexml_load_string加载XML文档

时间:2015-07-17 15:58:45

标签: php xml simplexml

我是新手使用XML文件。我一直在尝试使用以下格式加载XML文档作为对象或数组: 完成此修改

<?xml version="1.0"?>
<xdm:Device xmlns:xdm="http://www.example.com/schemas/imaging/con/xdm/1.1/" 
           xmlns:dd="http://www.example.com/schemas/imaging/con/dictionaries/1.0/" 
           xmlns:bsi="http://www.example.com/schemas/imaging/con/bsi/2003/08/21" 
           xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
           xmlns:count="http://www.example.com/schemas/imaging/con/counter/2006/01/13" 
           xmlns:media="http://www.example.com/schemas/imaging/con/media/2006/01/13/" 
           xmlns:xsi="http://www.example.org/2001/XMLSchema-instance" 
           xmlns:tt="http://www.example.com/schemas/imaging/con/capabilities/1.1/" 
           xmlns:pwg="http://www.example.com/schemas/imaging/con/pwg/sm/1.0/">
    <xdm:Information>        
        <xdm:Component id="system" componentType="system">
            <dd:MakeAndModel>Samsung LaserJet ML220</dd:MakeAndModel>
            <dd:Description>Blackand while printer</dd:Description>
            <dd:ProductNumber>XB3zzz</dd:ProductNumber>
            <dd:Manufacturer>
                <dd:Name>Samsung</dd:Name>
            </dd:Manufacturer>
        </xdm:Component>
    </xdm:Information>    
</xdm:Device>

我想从每个入口获取MakeAndModelDescriptionManufacturer等等。

我正在尝试使用以下代码加载代码,但我已经尝试了很多东西:

$xmlString = file_get_contents('test.xml');
$xml = simplexml_load_string($xmlString); 
var_dump($xml);

我尝试过其他更简单的XML文档,但它运行正常。但是使用我的文档它不起作用,它会加载一个空对象。 该文件没有标题。我在其中一个例子中读到php.net以下内容:

  

//文件test.xml包含一个带有根元素的XML文档//   至少有一个元素/ [root] / title。

如何实现将此XML加载到数组或对象?

编辑2:

当我使用示例中的简单XML文件时,var_dump输出以下内容:

[root@windows8 csvmail]# php ppp.php 
object(SimpleXMLElement)#1 (1) {
  ["movie"]=>
  object(SimpleXMLElement)#2 (5) {
    ["title"]=>
    string(22) "PHP: Behind the Parser"

如果获得以下内容,请输入真实文件:

[root@windows8 csvmail]# php ppp.php 
object(SimpleXMLElement)#1 (0) {
}
[root@windows8 csvmail]# 

1 个答案:

答案 0 :(得分:2)

其中包含// Combine some macros together to create a single macro // to launch a class containing a run method #define RUN_OVR_APP(AppClass) \ MAIN_DECL { \ if (!ovr_Initialize()) { \ SAY_ERR("Failed to initialize the Oculus SDK"); \ return -1; \ } \ int result = -1; \ try { \ result = AppClass().run(); \ } catch (std::exception & error) { \ SAY_ERR(error.what()); \ } catch (std::string & error) { \ SAY_ERR(error.c_str()); \ } \ ovr_Shutdown(); \ return result; \ } 的节点位于“XML命名空间”中。它们用于将多种类型的数据混合到一个文件中,即使标记名称会发生​​冲突。

在文件的顶部,:属性将前缀(可以通过生成文件的任何内容更改)与URL(作为特定类型数据的永久标识符)相关联。

要使用SimpleXML访问它们,可以使用the ->children() method“选择”命名空间。您可以依赖不更改的前缀,或者可以将永久标识符存储在变量或常量中,并使用它,如下所示:

xmlns:...

[Live Demo]

有关如何循环遍历多个元素以及其他基本用法,请参阅the examples in the PHP manual