我正在尝试使用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。
答案 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 (而不是前缀)。