将XML文件数据加载到PHP对象中时出现问题

伊森

我正在设置一个PHP站点,该站点将从Dell iDRAC收集信息我想使用返回的信息来创建一个PHP对象。从脚本第一部分返回的信息如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope" xmlnwsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlnwsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration" xmlnn1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_SystemView" xmlnxsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header>
    <To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</To>
    <Action>http://schemas.xmlsoap.org/ws/2004/09/enumeration/PullResponse</Action>
    <RelatesTo>uuid:e5ef952f-fb48-1b48-8003-06c7395d1500</RelatesTo>
    <MessageID>uuid:36a3a786-fb4c-1b4c-8012-fc140555dbe0</MessageID>
  </Header>
  <Body>
    <PullResponse>
      <Items>
        <DCIM_SystemView>
          <AssetTag/>
          <BIOSReleaseDate>01/20/2014</BIOSReleaseDate>
          <BIOSVersionString>2.1.2</BIOSVersionString>
          <BaseBoardChassisSlot>NA</BaseBoardChassisSlot>
          <BatteryRollupStatus>1</BatteryRollupStatus>
          <BladeGeometry>255</BladeGeometry>
          <BoardPartNumber>03015MA01</BoardPartNumber>
          <BoardSerialNumber>CN7475128I0205</BoardSerialNumber>
          <CPLDVersion>1.0.0</CPLDVersion>
          <CPURollupStatus>1</CPURollupStatus>
          <ChassisModel/>
          <ChassisName>Main System Chassis</ChassisName>
          <ChassisServiceTag>5P5KMW1</ChassisServiceTag>
          <ChassisSystemHeight>5</ChassisSystemHeight>
          <DeviceDescription>System</DeviceDescription>
          <ExpressServiceCode>12404926945</ExpressServiceCode>
          <FQDD>System.Embedded.1</FQDD>
          <FanRollupStatus>1</FanRollupStatus>
          <HostName/>
          <InstanceID>System.Embedded.1</InstanceID>
          <LastSystemInventoryTime>20140608040932.000000+000</LastSystemInventoryTime>
          <LastUpdateTime>20140522204842.000000+000</LastUpdateTime>
          <LicensingRollupStatus>1</LicensingRollupStatus>
          <LifecycleControllerVersion>2.1.0</LifecycleControllerVersion>
          <Manufacturer>Dell Inc.</Manufacturer>
          <MaxCPUSockets>2</MaxCPUSockets>
          <MaxDIMMSlots>12</MaxDIMMSlots>
          <MaxPCIeSlots>6</MaxPCIeSlots>
          <MemoryOperationMode>OptimizerMode</MemoryOperationMode>
          <Model>PowerEdge T420</Model>
          <NodeID>5P5KMW1</NodeID>
          <PSRollupStatus>1</PSRollupStatus>
          <PlatformGUID>31574d4f-c0b5-4b80-3510-00504c4c4544</PlatformGUID>
          <PopulatedCPUSockets>2</PopulatedCPUSockets>
          <PopulatedDIMMSlots>4</PopulatedDIMMSlots>
          <PopulatedPCIeSlots>1</PopulatedPCIeSlots>
          <PowerCap>317</PowerCap>
          <PowerCapEnabledState>3</PowerCapEnabledState>
          <PowerState>2</PowerState>
          <PrimaryStatus>1</PrimaryStatus>
          <RollupStatus>1</RollupStatus>
          <ServiceTag>5P5KMW1</ServiceTag>
          <StorageRollupStatus>1</StorageRollupStatus>
          <SysMemErrorMethodology>6</SysMemErrorMethodology>
          <SysMemFailOverState>NotInUse</SysMemFailOverState>
          <SysMemLocation>3</SysMemLocation>
          <SysMemMaxCapacitySize>393216</SysMemMaxCapacitySize>
          <SysMemPrimaryStatus>1</SysMemPrimaryStatus>
          <SysMemTotalSize>16384</SysMemTotalSize>
          <SystemGeneration>12G Monolithic</SystemGeneration>
          <SystemID>1273</SystemID>
          <SystemRevision>0</SystemRevision>
          <TempRollupStatus>1</TempRollupStatus>
          <UUID>4c4c4544-0050-3510-804b-b5c04f4d5731</UUID>
          <VoltRollupStatus>1</VoltRollupStatus>
          <smbiosGUID>44454c4c-5000-1035-804b-b5c04f4d5731</smbiosGUID>
        </DCIM_SystemView>
      </Items>
      <EndOfSequence/>
    </PullResponse>
  </Body>
</Envelope>

当我尝试使用该simplexml_load_string函数时,它将返回以下错误,并且不会将数据作为字符串处理。

PHP警告:simplexml_load_string():实体:第1行:解析器错误:第1行的PHP Shell代码中仅在文档的开头允许XML声明

PHP警告:simplexml_load_string():第1行的PHP Shell代码中

PHP警告:simplexml_load_string():第1行的PHP Shell代码中的^

但是,如果我使用完全相同的XML并手动创建变量,如下所示:

<<<XML
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope" xmlnwsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlnwsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration" xmlnn1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_SystemView" xmlnxsi="http://www.w3.org/2001/XMLSchema-instance">
  <Header>
    <To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</To>
    <Action>http://schemas.xmlsoap.org/ws/2004/09/enumeration/PullResponse</Action>
    <RelatesTo>uuid:641403a8-fb4a-1b4a-8003-06c7395d1500</RelatesTo>
    <MessageID>uuid:b4caac95-fb4d-1b4d-8051-fc140555dbe0</MessageID>
  </Header>
  <Body>
    <PullResponse>
      <Items>
        <DCIM_SystemView>
          <AssetTag/>
          <BIOSReleaseDate>01/20/2014</BIOSReleaseDate>
          <BIOSVersionString>2.1.2</BIOSVersionString>
          <BaseBoardChassisSlot>NA</BaseBoardChassisSlot>
          <BatteryRollupStatus>1</BatteryRollupStatus>
          <BladeGeometry>255</BladeGeometry>
          <BoardPartNumber>03015MA01</BoardPartNumber>
          <BoardSerialNumber>CN7475128I0205</BoardSerialNumber>
          <CPLDVersion>1.0.0</CPLDVersion>
          <CPURollupStatus>1</CPURollupStatus>
          <ChassisModel/>
          <ChassisName>Main System Chassis</ChassisName>
          <ChassisServiceTag>5P5KMW1</ChassisServiceTag>
          <ChassisSystemHeight>5</ChassisSystemHeight>
          <DeviceDescription>System</DeviceDescription>
          <ExpressServiceCode>12404926945</ExpressServiceCode>
          <FQDD>System.Embedded.1</FQDD>
          <FanRollupStatus>1</FanRollupStatus>
          <HostName/>
          <InstanceID>System.Embedded.1</InstanceID>
          <LastSystemInventoryTime>20140608040932.000000+000</LastSystemInventoryTime>
          <LastUpdateTime>20140522204842.000000+000</LastUpdateTime>
          <LicensingRollupStatus>1</LicensingRollupStatus>
          <LifecycleControllerVersion>2.1.0</LifecycleControllerVersion>
          <Manufacturer>Dell Inc.</Manufacturer>
          <MaxCPUSockets>2</MaxCPUSockets>
          <MaxDIMMSlots>12</MaxDIMMSlots>
          <MaxPCIeSlots>6</MaxPCIeSlots>
          <MemoryOperationMode>OptimizerMode</MemoryOperationMode>
          <Model>PowerEdge T420</Model>
          <NodeID>5P5KMW1</NodeID>
          <PSRollupStatus>1</PSRollupStatus>
          <PlatformGUID>31574d4f-c0b5-4b80-3510-00504c4c4544</PlatformGUID>
          <PopulatedCPUSockets>2</PopulatedCPUSockets>
          <PopulatedDIMMSlots>4</PopulatedDIMMSlots>
          <PopulatedPCIeSlots>1</PopulatedPCIeSlots>
          <PowerCap>317</PowerCap>
          <PowerCapEnabledState>3</PowerCapEnabledState>
          <PowerState>2</PowerState>
          <PrimaryStatus>1</PrimaryStatus>
          <RollupStatus>1</RollupStatus>
          <ServiceTag>5P5KMW1</ServiceTag>
          <StorageRollupStatus>1</StorageRollupStatus>
          <SysMemErrorMethodology>6</SysMemErrorMethodology>
          <SysMemFailOverState>NotInUse</SysMemFailOverState>
          <SysMemLocation>3</SysMemLocation>
          <SysMemMaxCapacitySize>393216</SysMemMaxCapacitySize>
          <SysMemPrimaryStatus>1</SysMemPrimaryStatus>
          <SysMemTotalSize>16384</SysMemTotalSize>
          <SystemGeneration>12G Monolithic</SystemGeneration>
          <SystemID>1273</SystemID>
          <SystemRevision>0</SystemRevision>
          <TempRollupStatus>1</TempRollupStatus>
          <UUID>4c4c4544-0050-3510-804b-b5c04f4d5731</UUID>
          <VoltRollupStatus>1</VoltRollupStatus>
          <smbiosGUID>44454c4c-5000-1035-804b-b5c04f4d5731</smbiosGUID>
        </DCIM_SystemView>
      </Items>
      <EndOfSequence/>
    </PullResponse>
  </Body>
</Envelope>
XML;

它像一种魅力。所以,我的问题很简单。如果使用XML标识符,我如何告诉PHP以与处理XML相同的方式处理字符串我试图像这样重新处理字符串:

 $new_string = <<<XML
   $string
     XML;

但是不行。还有其他想法吗?

贾科莫1968

您是否正在file_get_contents实际使用XML文件simplexml_load_string从字符串中加载XML,然后按照名称说明实际将XML文件加载到字符串中?

$xml_file = file_get_contents('test.xml');

$xml = simplexml_load_string($xml_file);

echo '<pre>';
print_r($xml);
echo '</pre>';

当我使用您的帖子中的XML时,输出是好的:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [xmlnwsa] => http://schemas.xmlsoap.org/ws/2004/08/addressing
            [xmlnwsen] => http://schemas.xmlsoap.org/ws/2004/09/enumeration
            [xmlnn1] => http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_SystemView
            [xmlnxsi] => http://www.w3.org/2001/XMLSchema-instance
        )

And so on…
And so on…
And so on…

但这就是说,如果我像这样在XML文件的开头添加空格或行,则可以完全重新创建您的错误;请注意以下一个简单的空格<?xml version="1.0" encoding="UTF-8"?>

 <?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope" xmlnwsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlnwsen="http://schemas.xmlsoap.org/ws/2004/09/enumeration" xmlnn1="http://schemas.dell.com/wbem/wscim/1/cim-schema/2/DCIM_SystemView" xmlnxsi="http://www.w3.org/2001/XMLSchema-instance">

And so on…
And so on…
And so on…

这是我的错误:

警告:simplexml_load_string():实体:第1行:解析器错误:仅在第5行/Applications/MAMP/htdocs/test.php中文档的开头才允许XML声明

警告:第5行/Applications/MAMP/htdocs/test.php中的simplexml_load_string():

警告:第5行/Applications/MAMP/htdocs/test.php中的simplexml_load_string():^

嘿!我知道你的痛苦!

无论如何,快速的解决办法我试过是使用trim$xml_file摆脱多余的空格处的这样的文件的开头和结尾:

$xml_file = file_get_contents('test.xml');

$xml = simplexml_load_string(trim($xml_file));

echo '<pre>';
print_r($xml);
echo '</pre>';

而且一切都很好!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将CSV文件数据加载到表中时出现MySQL错误

来自分类Dev

将JSON对象加载到Datatable Jquery中时出现问题

来自分类Dev

在JavaScript / SAPUI5中读取Excel(xlsx)文件数据时出现问题

来自分类Dev

将 XML 文件加载到表中时出现“文件或 LOB 操作 FILEOPEN 失败”

来自分类Dev

将数据文件读入对象数组时出现问题

来自分类Dev

从Mac OSX Mavericks将代码加载到Arduino板时出现问题

来自分类Dev

如何将csv文件数据加载到CDH?

来自分类Dev

将SQL文件数据加载到Postgres中的单个表中

来自分类Dev

访问XML数据时出现问题

来自分类Dev

用PHP将非标准xml wsman数据加载到对象中

来自分类Dev

使用Rubygems将CSV文件数据加载到Mysql中

来自分类Dev

使用Rubygems将CSV文件数据加载到Mysql中

来自分类Dev

将gif从数据加载到QMovie对象中(无文件)

来自分类Dev

将数据从JSON文件加载到Javascript对象中

来自分类Dev

将PHP变量加载到XML文件中

来自分类Dev

将图像加载到位图对象时出现奇怪的OutOfMemory问题

来自分类Dev

将数据框数据类型从对象转换为float64时出现问题

来自分类Dev

尝试加载到字符串中时出现一些奇怪的XML问题

来自分类Dev

“筛选”急切加载的数据时出现问题

来自分类常见问题

在Julia中加载CSV文件时出现问题

来自分类Dev

在Julia中加载CSV文件时出现问题

来自分类Dev

从文件jQuery数组加载数组时出现问题

来自分类Dev

加载文件时emacs出现问题

来自分类Dev

Lotusscript:使用PHP将电子邮件中的文件发送到网站时出现问题

来自分类Dev

从文件将数据加载到表中

来自分类Dev

将XML加载到PHP中-天气

来自分类Dev

在Vim中,加载tex文件的缩进脚本时出现问题

来自分类Dev

从sdcard将html加载到android中的webview时出现HTML,css,js问题?

来自分类Dev

使用PHP将数据插入MYSQL数据库时出现问题

Related 相关文章

  1. 1

    将CSV文件数据加载到表中时出现MySQL错误

  2. 2

    将JSON对象加载到Datatable Jquery中时出现问题

  3. 3

    在JavaScript / SAPUI5中读取Excel(xlsx)文件数据时出现问题

  4. 4

    将 XML 文件加载到表中时出现“文件或 LOB 操作 FILEOPEN 失败”

  5. 5

    将数据文件读入对象数组时出现问题

  6. 6

    从Mac OSX Mavericks将代码加载到Arduino板时出现问题

  7. 7

    如何将csv文件数据加载到CDH?

  8. 8

    将SQL文件数据加载到Postgres中的单个表中

  9. 9

    访问XML数据时出现问题

  10. 10

    用PHP将非标准xml wsman数据加载到对象中

  11. 11

    使用Rubygems将CSV文件数据加载到Mysql中

  12. 12

    使用Rubygems将CSV文件数据加载到Mysql中

  13. 13

    将gif从数据加载到QMovie对象中(无文件)

  14. 14

    将数据从JSON文件加载到Javascript对象中

  15. 15

    将PHP变量加载到XML文件中

  16. 16

    将图像加载到位图对象时出现奇怪的OutOfMemory问题

  17. 17

    将数据框数据类型从对象转换为float64时出现问题

  18. 18

    尝试加载到字符串中时出现一些奇怪的XML问题

  19. 19

    “筛选”急切加载的数据时出现问题

  20. 20

    在Julia中加载CSV文件时出现问题

  21. 21

    在Julia中加载CSV文件时出现问题

  22. 22

    从文件jQuery数组加载数组时出现问题

  23. 23

    加载文件时emacs出现问题

  24. 24

    Lotusscript:使用PHP将电子邮件中的文件发送到网站时出现问题

  25. 25

    从文件将数据加载到表中

  26. 26

    将XML加载到PHP中-天气

  27. 27

    在Vim中,加载tex文件的缩进脚本时出现问题

  28. 28

    从sdcard将html加载到android中的webview时出现HTML,css,js问题?

  29. 29

    使用PHP将数据插入MYSQL数据库时出现问题

热门标签

归档