早上好!我的“声誉”只有"1“,但我希望有人能帮助我解决这个非常恼人的错误(ENE)。但如果我能弄清楚如何在这里正确地格式化代码,那就太糟糕了。我想这个问题对每个人来说都是显而易见的,除了我。谢谢。
首先,XLM结果:
<?xml version="1.0" encoding="utf-8"?>
<markers></markers>
<marker site_name="Mineral Point Mine" mrds_id="D010915"</marker>然后是代码(如果我可以管理irt):
<?php
require("db.php");
$query = $_GET['query'];
function parseToXML($htmlStr) {
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$doc->preserveWhiteSpace = false;
$snode = $doc->createElement('markers', '');
$doc->appendChild($snode);
$link = mysqli_connect("localhost", $username, $password, $database);
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
$query = "{HIDDEN}";
$result = $link->query($query) or die($link->error);
while ($row = $result->fetch_assoc()) {
$node = $doc->createElement("marker","");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("site_name", parseToXML($row['site_name']));
$newnode->setAttribute("mrds_id", parseToXML($row['mrds_id']));
}
$result->close();
echo $doc->saveXML();
?>发布于 2020-11-06 19:42:03
在DOM中添加节点是一个两步的过程。首先使用document对象上的一个方法创建它们,然后使用父节点上的一个方法追加/插入它。
下面是一个不带数据库调用的示例:
$data = [
[
'site_name' => "Mineral Point Mine",
'mrds_id'=> "D010915"
]
];
$document = new DOMDocument('1.0', 'UTF-8');
$document->appendChild(
$markers = $document->createElement('markers')
);
foreach ($data as $row) {
// create the marker node using document method
$marker = $document->createElement('marker');
// add attributes
$marker->setAttribute('site_name', $row['site_name']);
$marker->setAttribute('mrds_id', $row['mrds_id']);
// append to markers parent element
$markers->appendChild($marker);
}
$document->formatOutput = TRUE;
echo $document->saveXML();输出:
<?xml version="1.0" encoding="UTF-8"?>
<markers>
<marker site_name="Mineral Point Mine" mrds_id="D010915"/>
</markers>通常,DOM方法接受UTF-8值而不进行转义。它将在序列化过程中根据需要对特殊字符进行转义。您的parseXML()调用将导致双重转义。
异常是DOMDocument::createElement()和DOMNode::$nodeValue赋值的第二个参数。它们只对某些字符进行转义,如<。我建议避免使用它们。追加文本节点或使用DOMNode::$textContent属性。
演示:
$document = new DOMDocument('1.0', 'UTF-8');
$document->appendChild(
$example = $document->createElement('example')
);
// assign content with special characters
$example->textContent = 'a & b, <>';
echo $document->saveXML();输出:
<?xml version="1.0" encoding="UTF-8"?>
<example>a & b, <></example>https://stackoverflow.com/questions/64701014
复制相似问题