Как создать XML-файл с определенной структурой, используя Php и Mysql?
$sql = "SELECT * FROM users ORDER BY RAND() LIMIT 100";
$xml = new SimpleXMLElement('<xml/>');
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_array()) {
$users = $xml->addChild('users');
$users->addChild('Id',$row['sno']);
$users->addChild('lat',$row['lat']);
$users->addChild('long',$row['lng']);
$users->addChild('address',$row['address']);
}
$conn->close();
//Create the XML file
$fp = fopen("users100r.xml","wb");
//Write the XML nodes
fwrite($fp,$xml->asXML());
fclose($fp);
echo $xml->saveXML();
?>
Я хочу создать файл XML, используя приведенный выше код, но проблема в том, что он не генерирует требуемую структуру, которая мне действительно нужна.
Мне нужен файл XML со следующей структурой. Как я могу сгенерировать это?
<users>
<point id="1" lat="24.24707031" lng="68.16540527" address="Pakistan"/>
<point id="2" lat="34.24707031" lng="63.16540527" address="Lahore"/>
<point id="3" lat="28.24707031" lng="55.16540527" address="Karachi"/>
</users>
1 ответ
Если ты хочешь users
в качестве корневого элемента вы должны будете создать элемент SimpleXMLEle таким образом. В цикле добавьте point
элемент и установить атрибуты.
$rows = [
['id' => 1],
['id' => 2]
];
$users = new SimpleXMLElement('<users/>');
foreach ($rows as $row) {
$point = $users->addChild('point');
$point['id'] = $row['id'];
}
echo $users->asXml();
Выход:
<?xml version="1.0"?>
<users><point id="1"/><point id="2"/></users>
Если вы хотите / нуждаетесь в большем контроле, вам придется переключиться на DOM.
$dom = new DOMDocument();
$users = $dom->appendChild($dom->createElement('users'));
foreach ($rows as $row) {
$point = $users->appendChild($dom->createElement('point'));
$point->setAttribute('id', $row['id']);
}
echo $dom->saveXml();
Или к XMLWriter, который лучше подходит для больших файлов.
$xml = new XMLWriter();
$xml->openURI('php://output');
$xml->startDocument();
$xml->startElement('users');
foreach ($rows as $row) {
$xml->startElement('point');
$xml->writeAttribute('id', $row['id']);
$xml->endElement();
}
$xml->endElement();
$xml->endDocument();