1 回答
TA贡献1841条经验 获得超3个赞
CDATA 部分是一种特殊的文本节点。它们编码/解码的次数要少得多,并且保持前导/尾随空格。因此,DOM 解析器应该从以下两个示例节点读取相同的值:
<examples>
<example>text<example>
<example><![CDATA[text]]]></example>
</examples>
要创建 CDATA 部分,请使用该DOMDocument::createCDATASection()方法并像任何其他节点一样附加它。DOMNode::appendChild()返回附加节点,因此您可以嵌套调用:
$properties = [
[ 'name' => 'qid', 'value' => "1"]
];
$document = new DOMDocument();
$subquestions = $document->appendChild(
$document->createElement('subquestions')
);
// appendChild() returns the node, so it can be nested
$row = $subquestions->appendChild(
$document->createElement('row')
);
// append the properties as element tiwth CDATA sections
foreach ($properties as $property) {
$element = $row->appendChild(
$document->createElement($property['name'])
);
$element->appendChild(
$document->createCDATASection($property['value'])
);
}
$document->formatOutput = TRUE;
echo $document->saveXML();
输出:
<?xml version="1.0"?>
<subquestions>
<row>
<qid><![CDATA[1]]></qid>
</row>
</subquestions>
大多数情况下,使用普通文本节点效果更好。
foreach ($properties as $property) {
$element = $row->appendChild(
$document->createElement($property['name'])
);
$element->appendChild(
$document->createTextNode($property['value'])
);
}
这可以通过使用DOMNode::$textContent属性进行优化。
foreach ($properties as $property) {
$row->appendChild(
$document->createElement($property['name'])
)->textContent = $property['value'];
}
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报