如何在php中提取这种类型的XML格式?我尝试'simplexml_load_file'函数,但它不起作用,它只能正常的xml格式。
提前致谢:)
<?xml version="1.0"?>
<a:p>
<a:r>
<a:rPr strike="noStrike" u="none" b="0" cap="none" baseline="0" sz="1400" lang="en-US" i="0">
<a:solidFill>
<a:srgbClr val="595959"/>
</a:solidFill>
<a:latin typeface="Arial"/>
<a:ea typeface="Arial"/>
<a:cs typeface="Arial"/>
<a:sym typeface="Arial"/>
</a:rPr>
<a:t>E-mail Address</a:t>
</a:r>
答案 0 :(得分:2)
您展示的XML不是格式正确的,这意味着它与XML应该是什么样的结构不匹配。具体来说,第2行的<a:p>
元素没有结束标记</a:p>
。
添加该结束标记应该使simplexml_load_string
有效,但是由于具有未定义的命名空间a
,您也会收到警告。每个元素名称的一部分a:
表示这些元素是别名为a
的命名空间的一部分。要解决此问题,您需要在根元素中添加一个属性来定义该别名,如下所示:<a:p xmlns:a="some-namespace">
(将 some-namespace
替换为实际显然,您正在使用的XML内容的命名空间 - 看起来它可能是MS Word文档的内容,因此命名空间可能类似于http://schemas.microsoft.com/office/word/2003/wordml
,作为猜测。
但是,一旦开始正确使用命名空间,就必须通知simplexml_load_string
您正在加载的内容位于该命名空间中;这是通过函数ns
的第四个参数完成的。
一个完整的,有效的例子是:
<?php
$content = <<<XML
<?xml version="1.0"?>
<a:p xmlns:a="some-namespace">
<a:r>
<a:rPr strike="noStrike" u="none" b="0" cap="none" baseline="0" sz="1400" lang="en-US" i="0">
<a:solidFill>
<a:srgbClr val="595959"/>
</a:solidFill>
<a:latin typeface="Arial"/>
<a:ea typeface="Arial"/>
<a:cs typeface="Arial"/>
<a:sym typeface="Arial"/>
</a:rPr>
<a:t>E-mail Address</a:t>
</a:r>
</a:p>
XML;
$xml = simplexml_load_string($content, "SimpleXMLElement", 0, "some-namespace");
print_r($xml);
?>
显然,您通常会从文件或类似文件中读取XML,但为了简单起见,我将其内联在 heredoc 中。
您可以查看simplexml_load_string和SimpleXMLElement文档,了解其他有用的详细信息。