我正在尝试使用simplexml_load_file()
加载XML文件并访问<dc:title>
标记,但是当我转储加载了我的xml文件的$xml
变量时,所有以{开头的标记{1}}没有显示。有没有办法告诉解析器包含它们?我应该使用不同的解析器吗?
这是我的示例文件代码:
<dc:
代码我用来检查看到的标签:
<?xml version='1.0' encoding='utf-8'?>
<package xmlns="http://www.idpf.org/2007/opf" prefix="ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/" unique-identifier="pub-id" version="3.0" xml:lang="en">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title>test</dc:title>
</metadata>
</package>
结果:
$xml = simplexml_load_file('test.xml');
echo '<pre>';var_dump($xml);echo '</pre>';
元数据实际上是空的。想法?
答案 0 :(得分:2)
首先,dc
是名称空间,不是标记名称的一部分。出于测试目的,您可以打印给定xml中使用的命名空间。执行代码段
$namespaces = $xml->getNamespaces(true);
var_dump($namespaces);
将输出
array(3) {
'' =>
string(28) "http://www.idpf.org/2007/opf"
'xml' =>
string(36) "http://www.w3.org/XML/1998/namespace"
'dc' =>
string(32) "http://purl.org/dc/elements/1.1/"
}
您必须为命名空间注册一个前缀以供xpath使用,然后您可以将其用于选择:
$xml->registerXPathNamespace('b', 'http://purl.org/dc/elements/1.1/');
$a =$xml->xpath('//b:*/text()');
foreach($a as $t) {
print($t."\n");
}
这将输出您想要获得的元素的test
。