在php脚本上,如何使用字符串输出从msql数据库获取值的XML数据来进行foreach循环?我从simpleXmlElement内部的while循环中获取了一些代码,希望它可以输出xml,但无法正常工作。我正在使用的服务器不允许使用类SimpleXMLElement,因此我需要使用该字符串进行foreach循环并根据需要输出xml。
我到目前为止所拥有的:编辑:
<?php
#Programmer: Moses
require('./.env');
// Opens a connection to a mySQL server
try {
$db = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME. ';charset=utf8', DB_USERNAME, DB_PASSWORD);
} catch (PDOException $e) {
echo "An Error occured, could not connect!";
}
$statement = $db->query('SELECT * FROM markers');
//$result = $statement->fetchAll(PDO::FETCH_ASSOC);
$xmlWriter = new XMLWriter();
$xmlWriter->openUri('php://stdout');
$xmlWriter->startDocument();
$xmlWriter->setIndent(2);
$xmlWriter->startElement('markers');
foreach ($statement as $row) {
$xmlWriter->startElement('marker');
$xmlWriter->writeAttribute('name', $row['name']);
$xmlWriter->writeAttribute('address', $row['address']);
$xmlWriter->writeAttribute('lat', $row['lat']);
$xmlWriter->writeAttribute('lng', $row['lng']);
$xmlWriter->writeAttribute('type', $row['type']);
$xmlWriter->endElement();
}
$xmlWriter->endElement();
$xmlWriter->endDocument();
/**
$str = <<<XML
<xml>
<marker name="Walvis Bay Live" lat="-22.956112" lng="14.508056" address="Walvis bay namibia Africa" type="Weather Station"></marker>
<marker name="Centro Surf Bracciano" lat="11.588599" lng="43.145851" address="djibouti djibouti" type="Weather Station"></marker>
<marker name="Bashewa Weather" lat="-25.825212" lng="28.312128" address="Garstfontein Rd Pretoria" type="Weather Station"></marker>
<marker name="Nelspruit Live" lat="-25.475298" lng="30.969416" address="nelspruit south africa" type="Weather Station"></marker>
<marker name="Richards Bay Live" lat="-28.780727" lng="32.038284" address="richards bay south africa" type="Weather Station"></marker>
<marker name="Cape Town Live" lat="-33.923775" lng="18.423346" address="cape town south africa" type="Weather Station"></marker>
</xml>
XML;
header("Content-type: text/xml");
echo $str;
exit;
*/
/**
$xml = new SimpleXMLElement('<xml/>');
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
$node = $xml->addChild('marker');
$node->addAttribute('name', $row['name']);
$node->addAttribute('address', $row['address']);
$node->addAttribute('lat', $row['lat']);
$node->addAttribute('lng', $row['lng']);
$node->addAttribute('type', $row['type']);
}
header('Content-type: text/xml');
print($xml->asXML());
exit;
*/
foreach
可以迭代实现可遍历的任何数组或对象。的结果PDOStatement::fetch()
是记录/行。只需将语句提供给foreach。
foreach($statement as $row) { ...
像这样的转储的更好的API是XMLWriter。它将结果直接写入流,而无需先将整个文档存储在内存中。使用XML API也会根据需要进行转义。这是一个小例子:
$statement = [
[ 'name' => 'one', 'location' => '...', /* ... */],
[ 'name' => 'two', 'location' => '...', /* ... */]
];
$xmlWriter = new XMLWriter();
$xmlWriter->openUri('php://stdout');
$xmlWriter->startDocument();
$xmlWriter->setIndent(2);
$xmlWriter->startElement('markers');
foreach ($statement as $row) {
$xmlWriter->startElement('marker');
$xmlWriter->writeAttribute('name', $row['name']);
/* other attributes ... */
$xmlWriter->endElement();
}
$xmlWriter->endElement();
$xmlWriter->endDocument();
输出:
<?xml version="1.0"?>
<markers>
<marker name="one"/>
<marker name="two"/>
</markers>
在DOM中,您可以创建,附加和配置节点。这是一个小示例:https : //stackoverflow.com/a/21760903/2265374
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句