MasetrPage.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<PAGE
xmlns:PHOENIX = 'PHOENIX'
xmlns:PHOENIX.CORE = 'PHOENIX/CORE'
xmlns:PHOENIX.CORE.PAGE = 'PHOENIX/CORE/PAGE'
xmlns:PHOENIX.CORE.COMPILER = 'PHOENIX/CORE/COMPILER'
>
</PAGE>
Page.xml
:
<PHEONIX.CORE:EXAMPLE.ELEMENT />
<PHEONIX.CORE:EXAMPLE.ELEMENT2 />
现在,我想在Page.xml
MasterPage.xml
标记中加入PAGE
内容。
我的PHP代码:
//[i] Initialize new \DOMDocument from from PageMaster.xml.
$pageDocument = \DOMDocument::load('PageMaster.xml');
//[i] Create fragment from pageDocument and append content from page XML.
$pageDocument_frag = $pageDocument->createDocumentFragment();
$pageDocument_frag->appendXML(file_get_contents('Page.xml'));
但是在这里我得到一个错误,即命名空间没有在Page.xml
中定义。但对于我的项目,我不想在Page.xml
答案 0 :(得分:0)
如果您没有在片段字符串中定义名称空间,那么它将不是有效的XML。命名空间前缀既可交换也可选。前缀不定义名称空间,xmlns * -attributes可以。
以下3个示例都解析为相同的命名空间和本地节点名称:
<f:foo xmlns:f="urn:foo-ns"/>
<foo:foo xmlns:foo="urn:foo-ns"/>
<foo xmlns="urn:foo-ns"/>
所有结果都是一个元素节点,其本地名称为foo
,名称空间为urn:foo-ns
。您可以将节点名称读为{urn:foo-ns}foo
。
但是,为了方便用户的XML输入,您可以为命名空间定义一组前缀。您将输入包装到定义命名空间的标记中。之后,您可以将其解析为片段并复制子节点。
$xhtml = <<<'XHTML'
<div>
<p>Some Content.</p>
</div>
XHTML;
$document = new DOMDocument();
$import = $document->createDocumentFragment();
$import->appendXml(
'<section xmlns="http://www.w3.org/1999/xhtml">'.$xhtml.'</section>'
);
$fragment = $document->createDocumentFragment();
foreach ($import->childNodes->item(0)->childNodes as $node) {
$fragment->appendChild($node->cloneNode(TRUE));
}
$document->formatOutput = TRUE;
echo $document->saveXml($fragment);
输出:
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Some Content.</p>
</div>