我是PHP新手simplexml parser
。我已经运行了我找到的示例,它们的工作方式与广告一致。我不能让它与我的程序一起工作。我在这里搜了好几个小时。
我有一个名为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>
我使用以下代码将其加载到解析器中:
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.');
}
该文件存在,但我在print_r的所有内容是:
file exists
SimpleXMLElement Object ( )
如何访问节点?我必须使用的其他XML文件有很多层。
由于
答案 0 :(得分:7)
您在问题中描述的错误模式实际上是正确的行为,而不是错误。
如果您在 SimpleXMLElement 上使用print_r
(或var_dump
),它只会向您显示有关该对象的一些基本信息和 不 XML文档的整个内容。
要查看整个XML,请改用the asXML()
method。或者,为了获得调试信息,您可以使用专门了解如何调试 SimpleXMLElement 内容的库,例如simplexml_debug编写的IMSop。
在您的特定情况下,对象显示为空(没有对象成员),因为默认命名空间中的XML文档中没有任何节点(请参阅:Namespaces in XML 1.0) - 在{{3之后 - 已经从对象内部调试处理程序传递到print_r
或var_dump
函数然后显示。因此,只给出了类名,以便您可以看到它是某个类的对象 - 并且没有成员:
SimpleXMLElement Object ( )
^ ^ ^
object type | `------ object fields (empty)
|
variable type
如何处理?它非常简单:了解XML(你知道它)并从中获取数据:
由于您的XML元素名称包含冒号,因此您应该知道这些名称是PHP: Basic SimpleXML usage - Manual。正如您在print_r
输出中看到的差异一样,您还会看到访问该命名空间中的子元素的不同之处。您必须使用XML namespaces并指定要获取子元素的名称空间。如果使用xpath()
方法访问元素,则需要在 SimpleXMLElement 上调用该方法之前注册名称空间前缀。
在网站上点击了一些选择的SimpleXML和XML命名空间相关的Q&amp; A材料:
children()
method(2009年2月)您也可以从PHP手册中获取此信息,只需查看Parse XML namespaces with php SimpleXML中与命名空间相关的信息。
答案 1 :(得分:0)
您可以使用file_get_contents
加载XML文件。
尝试
if(file_exists('core.xml'))
{
echo 'file exists <br>';
$xml_core = file_get_contents('core.xml');
$xml = new SimpleXMLElement($xml_core);
print_r($xml);
}
else
{
exit('Failed to open core.xml.');
}