使用PHP将冒号写入XML

时间:2018-05-21 18:59:19

标签: php xml simplexml

我正在尝试使用SimpleXML从PhP输出XML文件。我遇到了问题":" (冒号)字符。 (谈论模仿生活的艺术!)

有没有办法逃脱冒号,所以我可以将我的元素添加到对象?

这是我的代码:

$urlset->addAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9');

此行通过正常,因此只有属性名称失败,如下例所示:

$urlset->addAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
$urlset->addAttribute('xsi:schemaLocation','http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd');

在每种情况下,它都会删除":"之前的任何内容,如下所示:

<urlset 
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
    xsi="http://www.w3.org/2001/XMLSchema-instance" 
    schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
>

同样,我的问题不在于阅读/解析&#34;:&#34;来自XML,但写了&#34;:&#34;从PHP到XML。在网络上有很多解析,但我没有找到关于编写&#34;:&#34;来自PHP。

1 个答案:

答案 0 :(得分:2)

您似乎无法使用SimpleXML 定义将在文档中使用的命名空间(这是xmlns属性的用途)。我发现您可以在根节点的声明中指定它们,如下所示:

$simpleXml = new SimpleXMLElement('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"></urlset>');

在构建站点地图的情况下,您可能不必担心设置任何名称空间。但是,对于更通用的解决方案,它定义了一个默认命名空间和一个前缀为alt的第二个命名空间。

$simpleXml = new SimpleXMLElement('<root xmlns="http://default.namespace.com" xmlns:alt="http://alt.namespace.com"></root>');

$simpleXml->addChild("child", "node in the default namespace");
$simpleXml->addChild("other", "node in the alternate namespace", "http://alt.namespace.com");

print $simpleXml->asXML();

将产生:

<root xmlns="http://default.namespace.com" xmlns:alt="http://alt.namespace.com">
  <child>node in the default namespace</child>
  <alt:other>node in the alternate namespace</alt:other>
</root>

addAttribute的第三个可选参数是命名空间,它可以帮助您使用该名称空间创建属性或节点。请注意,您需要使用命名空间的 url (而不是前缀)。