Kan*_*Stu 2 php xml simplexml xml-parsing simplexml-load-string
我是simplexml parserPHP的新手.我已经运行了我找到的示例,它们的工作方式与广告一致.我不能让它与我的程序一起工作.我在这里搜索了几个小时.
我有一个名为core.xml的XML文件(注意节点标签有冒号):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dc:title>Lecture 3</dc:title>
<dc:creator>John Brown & Greg Smith</dc:creator>
<cp:lastModifiedBy>Greg Smith</cp:lastModifiedBy>
<cp:revision>165</cp:revision>
<dcterms:created xsi:type="dcterms:W3CDTF">2010-02-19T04:37:55Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2014-01-30T02:41:30Z</dcterms:modified>
</cp:coreProperties>
Run Code Online (Sandbox Code Playgroud)
我使用以下代码将其加载到解析器中:
if (file_exists('core.xml')){
echo 'file exists <br>';
$xml_core = simplexml_load_file('core.xml');
print_r($xml_core);
}
else
{
exit('Failed to open core.xml.');
}
Run Code Online (Sandbox Code Playgroud)
该文件存在,但我在print_r得到的是:
file exists
SimpleXMLElement Object ( )
Run Code Online (Sandbox Code Playgroud)
我如何访问节点?我必须使用的其他XML文件有很多层.
谢谢
您在问题中描述的错误模式实际上是正确的行为,而不是错误.
如果您在SimpleXMLElement上使用print_r(或var_dump就此而言),它只会显示有关该对象的一些基本信息,而不会显示XML文档的整个内容.
要查看整个XML,请改用该asXML()方法.或者获取调试信息,您可以使用一个库,专门了解关于如何调试的SimpleXMLElement内容的喜欢simplexml_debug写IMSOP.
在您的特定情况下,对象显示为空(没有对象成员),因为默认命名空间中的XML文档中没有任何节点(请参阅:XML 1.0中的命名空间) - 在SimpleXMLElement到数组的或多或少的复杂规则之后应用了转换 - 将从对象内部调试处理程序传递到要显示的函数print_r或var_dump函数.因此,只给出了类名,以便您可以看到它是某个类的对象 - 并且没有成员:
SimpleXMLElement Object ( )
^ ^ ^
object type | `------ object fields (empty)
|
variable type
Run Code Online (Sandbox Code Playgroud)
怎么处理?这很简单:知道XML(你知道它)并从文档中获取数据:
由于您的XML元素名称包含冒号,因此您应该知道这些是所谓的XML命名空间.正如您在print_r输出中看到的差异,您还将看到访问该命名空间中的子元素的不同之处.您必须使用该children()方法并指定要获取子元素的名称空间.如果使用该xpath()方法访问元素,则需要在您调用该方法的SimpleXMLElement上使用它之前注册名称空间前缀.
在网站上有一些选择的SimpleXML和XML Namespace相关的问答材料:
您还可以从PHP手册中获取此信息,只需查看SimpleXMLElement API文档中的命名空间相关信息即可.
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |