使用 PHP 导出到 XML
Exporting to XML with PHP
尝试以下 PHP 导出到 XML 以便为 Yealink SIP-T46G 创建远程 phone 电子书。设法做到这一点,但目前正在导出一种 XML 格式,该格式在 phone 上使用无效。浏览整个网站,我发现了类似的问题,但未能解决这个问题。
<?php
include './data/datalogin.php';
$sql = mysqli_query($con,"SELECT contact_id, name, phone, cell FROM contact ORDER BY name ASC");
$xml = "<root_contact>";
while($r = mysqli_fetch_array($sql))
{
$xml .= "<contact>";
$xml .= $display_name=$r["name"];
$xml .= $office_number=$r["phone"];
$xml .= $mobile_number=$r["cell"];
$xml .= "</contact>";
}
$xml .= "</root_contact>";
$sxe = new SimpleXMLElement($xml);
$dom = new DOMDocument('1,0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($sxe->asXML());
echo $dom->saveXML();
$dom->save('phonebookt47.xml');
?>
当前输出的格式只是在显示后立即添加 phone 数字,而不是在下面添加所需的格式。
<contact>SampleCompany01666666666</contact>
需要它以下面的格式导出
<contact display_name="SampleCompanyName" office_number="01666666666" mobile_number="07945444444"/>
我认为它并不遥远,但我们将不胜感激。
您需要将属性放在 content
标签中,如下所示:
<?php
include './data/datalogin.php';
$sql = mysqli_query($con,"SELECT contact_id, name, phone, cell FROM contact ORDER BY name ASC");
$xml = "<root_contact>";
while($r = mysqli_fetch_array($sql))
{
$xml .= '<contact display_name="'.$r["name"].'" office_number="'.$r["phone"].'" mobile_number="'.$r["cell"].'" />';
}
$xml .= "</root_contact>";
$sxe = new SimpleXMLElement($xml);
$dom = new DOMDocument('1,0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($sxe->asXML());
echo $dom->saveXML();
$dom->save('phonebookt47.xml');
?>
您可以将 SimpleXMLElement
与 addChild()
和 addAttribute()
一起使用:
<?php
$data = [
['id' => 1, 'name' => 'Contact One', 'phone' => '555555501', 'cell' => '999999901'],
['id' => 2, 'name' => 'Contact Two', 'phone' => '555555502', 'cell' => '999999902'],
['id' => 3, 'name' => 'Contact Three', 'phone' => '555555503', 'cell' => '999999903'],
];
$xml = new SimpleXMLElement('<root_contact/>');
foreach($data as $r) {
$contact = $xml->addChild('contact');
$contact->addAttribute('display_name', $r["name"]);
$contact->addAttribute('office_number', $r["phone"]);
$contact->addAttribute('mobile_number', $r["cell"]);
}
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
header('Content-Type: text/xml');
echo $dom->saveXML();
//$dom->save('phonebookt47.xml');
由于您将 XML 编写为串联字符串,因此您只需要确保包含进入其中的所有静态文本。它应该看起来像这样:
$xml .= '<contact display_name="' . $r["name"] . '"office_number="' . $r["cell"] . '" mobile_number="' . $r["cell"] . '"/>';
}
编辑:只需将字符串海峡作为文本转储到文件中。这消除了设备支持 SimpleXMLElement 功能的需要。
性能说明:我故意将它压缩成一行,因为每次你使用 $xml .=,它都会重新加载你的整个 xml 字符串追加下一个参数。如果使用大 XMLs,这会大大降低你的速度。
如果这仍然太慢,您甚至可能想要创建一个现金变量,在将它们写入您的 xml 字符串之前一次存储多个条目。
尝试以下 PHP 导出到 XML 以便为 Yealink SIP-T46G 创建远程 phone 电子书。设法做到这一点,但目前正在导出一种 XML 格式,该格式在 phone 上使用无效。浏览整个网站,我发现了类似的问题,但未能解决这个问题。
<?php
include './data/datalogin.php';
$sql = mysqli_query($con,"SELECT contact_id, name, phone, cell FROM contact ORDER BY name ASC");
$xml = "<root_contact>";
while($r = mysqli_fetch_array($sql))
{
$xml .= "<contact>";
$xml .= $display_name=$r["name"];
$xml .= $office_number=$r["phone"];
$xml .= $mobile_number=$r["cell"];
$xml .= "</contact>";
}
$xml .= "</root_contact>";
$sxe = new SimpleXMLElement($xml);
$dom = new DOMDocument('1,0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($sxe->asXML());
echo $dom->saveXML();
$dom->save('phonebookt47.xml');
?>
当前输出的格式只是在显示后立即添加 phone 数字,而不是在下面添加所需的格式。
<contact>SampleCompany01666666666</contact>
需要它以下面的格式导出
<contact display_name="SampleCompanyName" office_number="01666666666" mobile_number="07945444444"/>
我认为它并不遥远,但我们将不胜感激。
您需要将属性放在 content
标签中,如下所示:
<?php
include './data/datalogin.php';
$sql = mysqli_query($con,"SELECT contact_id, name, phone, cell FROM contact ORDER BY name ASC");
$xml = "<root_contact>";
while($r = mysqli_fetch_array($sql))
{
$xml .= '<contact display_name="'.$r["name"].'" office_number="'.$r["phone"].'" mobile_number="'.$r["cell"].'" />';
}
$xml .= "</root_contact>";
$sxe = new SimpleXMLElement($xml);
$dom = new DOMDocument('1,0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($sxe->asXML());
echo $dom->saveXML();
$dom->save('phonebookt47.xml');
?>
您可以将 SimpleXMLElement
与 addChild()
和 addAttribute()
一起使用:
<?php
$data = [
['id' => 1, 'name' => 'Contact One', 'phone' => '555555501', 'cell' => '999999901'],
['id' => 2, 'name' => 'Contact Two', 'phone' => '555555502', 'cell' => '999999902'],
['id' => 3, 'name' => 'Contact Three', 'phone' => '555555503', 'cell' => '999999903'],
];
$xml = new SimpleXMLElement('<root_contact/>');
foreach($data as $r) {
$contact = $xml->addChild('contact');
$contact->addAttribute('display_name', $r["name"]);
$contact->addAttribute('office_number', $r["phone"]);
$contact->addAttribute('mobile_number', $r["cell"]);
}
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
header('Content-Type: text/xml');
echo $dom->saveXML();
//$dom->save('phonebookt47.xml');
由于您将 XML 编写为串联字符串,因此您只需要确保包含进入其中的所有静态文本。它应该看起来像这样:
$xml .= '<contact display_name="' . $r["name"] . '"office_number="' . $r["cell"] . '" mobile_number="' . $r["cell"] . '"/>';
}
编辑:只需将字符串海峡作为文本转储到文件中。这消除了设备支持 SimpleXMLElement 功能的需要。
性能说明:我故意将它压缩成一行,因为每次你使用 $xml .=,它都会重新加载你的整个 xml 字符串追加下一个参数。如果使用大 XMLs,这会大大降低你的速度。
如果这仍然太慢,您甚至可能想要创建一个现金变量,在将它们写入您的 xml 字符串之前一次存储多个条目。