当前位置: 首页 > 知识库问答 >
问题:

PHP加载XML文档simplexml_load_string

卫嘉佑
2023-03-14

我不熟悉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>

我想从每个入口获取,例如MakeAndModelDescription制造商,等等。

我目前正在尝试使用以下代码加载代码,但我已经尝试了很多方法:

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

我尝试过其他更简单的XML文档,效果很好。但对于我的文档,它不起作用,而是加载一个空对象。该文件没有标题。我用php阅读。net在其中一个示例中显示以下内容:

//文件测试。xml包含一个包含根元素//和至少一个元素/[root]/标题的xml文档。

如何实现将此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个答案

太叔望
2023-03-14

其中包含的节点位于“XML名称空间”中。它们用于将多种类型的数据混合到一个文件中,即使标记名会发生冲突。

在文件的顶部,xmlns: 属性将前缀(可以由生成文件的任何对象更改)与URL(充当特定类型数据的永久标识符)关联起来。

要使用SimpleXML访问它们,您可以使用-

// Defining my own ways of referring to the namespaces, regardless of prefix used
define('XMLNS_HP_XDM_1_1', 'http://www.hp.com/schemas/imaging/con/xdm/1.1/');
define('XMLNS_HP_DICT_1_0', 'http://www.hp.com/schemas/imaging/con/dictionaries/1.0/');

// Load the XML in the normal way
$sx = simplexml_load_string($xml);

// Switch to the first namespace, and look at the first Component
$component = $sx->children(XMLNS_HP_XDM_1_1)->Information->Component;

// Attributes with no : in are technically in no namespace at all,
// so we have to switch back to the null namespace using attributes()
$component_id = (string)$component->attributes(null)->id;

// Switch to the second namespace to find the MakeAndModel
$make_and_model = (string)$component->children(XMLNS_HP_DICT_1_0)->MakeAndModel;

echo "$component_id : $make_and_model";

[现场演示]

有关如何在多个元素上循环以及其他基本用法,请参阅PHP手册中的示例。

 类似资料:
  • 主要内容:示例数据,使用XML添加文档在上一章中,我们学习解释了如何向Solr中添加和文件格式的数据。在本章中,将演示如何使用文档格式在Apache Solr索引中添加数据。 示例数据 假设我们需要使用文件格式将以下数据添加到Solr索引。 Student ID First Name Last Name Phone City 001 Rajiv Reddy 9848022337 Hyderabad 002 Siddharth Bhat

  • 问题内容: 我已经创建了两个XML文档,并且想将这两个文档合并到一个新的信封中。所以我有 和 我想做的是将两个节点合并到一个根节点中: 合并的文档 我尝试创建一个临时文档,并用文档的根节点替换子级: 我当时希望用两个文档的根元素替换两个空格,但我得到“ WRONG_DOCUMENT_ERR:一个节点在与创建它的文档不同的文档中使用”。我尝试采用和导入根节点,但是遇到相同的错误。 是否有一些简便的方

  • 在JSP页面中,我可以使用JSTL加载xml文件,从xml文件路径或url加载到JSTL变量,如下所示: 现在,如果我的xml文件在String变量而不是文件系统中,我如何做完全相同的事情? 说我有 如何将其导入jstl var“xmldocument”? 谢谢。

  • 模块加载器指的是coolie.js,在浏览器中使用。 coolie.config() 配置模块加载器的各项参数,详细文档点这里。 coolie.use([moduleId]) 执行模块加载器。其中入口模块 id 可以省略,由 html 里的data-main属性指定,指定入口模块常用于单元测试。 coolie.use('path/to/app.js'); 通常,一个模块加载的配置文件如下: co

  • 在前面的示例中,您已经了解了如何创建新文档并向其添加页面。 本章将教您如何加载系统中已存在的PDF文档,并对其执行某些操作。 加载现有PDF文档 PDDocument类的load()方法用于加载现有PDF文档。 按照以下步骤加载现有PDF文档。 第1步:加载现有PDF文档 使用PDDocument类的静态方法load()加载现有PDF文档。 此方法接受文件对象作为参数,因为这是一个静态方法,您可以

  • 我正在使用Apache PDFBox渲染PDF文档的缩略图。因此,我加载PDF并将第一页用作缩略图。问题是,对于特定的文档,似乎没有正确加载。对于所有其他文档,它的工作方式与预期一致。 <代码>ByteArrayInputStream is=新建ByteArrayInputStream(pdfData) PDDocument pdf=PDDocument。载荷(is,true) <代码>列表 pd