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
标签中。
My PHP Code:
//[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
如果你没有在片段字符串中定义名称空间,那么它将不是有效的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>