首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XLM文件顶部的<markers></markers>,而不是底部的</markers>

XLM文件顶部的<markers></markers>,而不是底部的</markers>
EN

Stack Overflow用户
提问于 2020-11-06 00:11:58
回答 1查看 36关注 0票数 0

早上好!我的“声誉”只有"1“,但我希望有人能帮助我解决这个非常恼人的错误(ENE)。但如果我能弄清楚如何在这里正确地格式化代码,那就太糟糕了。我想这个问题对每个人来说都是显而易见的,除了我。谢谢。

首先,XLM结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<markers></markers>
<marker site_name="Mineral Point Mine" mrds_id="D010915"</marker>

然后是代码(如果我可以管理irt):

代码语言:javascript
复制
<?php
require("db.php");

$query = $_GET['query']; 

function parseToXML($htmlStr) {
$xmlStr=str_replace('<','&lt;',$htmlStr);
$xmlStr=str_replace('>','&gt;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&#39;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$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();
?>
EN

回答 1

Stack Overflow用户

发布于 2020-11-06 19:42:03

在DOM中添加节点是一个两步的过程。首先使用document对象上的一个方法创建它们,然后使用父节点上的一个方法追加/插入它。

下面是一个不带数据库调用的示例:

代码语言:javascript
复制
$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();

输出:

代码语言:javascript
复制
<?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属性。

演示:

代码语言:javascript
复制
$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();

输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<example>a &amp; b, &lt;&gt;</example>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64701014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档