PDA

View Full Version : خواندن فایل xml در php



sepehrazimi
شنبه 03 مرداد 1394, 18:11 عصر
سلام دوستان من یک فایل xml به صورت زیر دارم میخوام اطلاعاتشو استخراج کنم باید چیکار کنم ؟ سایت های زیادی رفتم ولی چون ساختارش یکم پیچیده هست از روش هایی که در سایت ها گفته شده نمیشه استفاده کرد.:متفکر:

<?xml version="1.0" standalone="yes"?><t1>
<b1>
<address>1تست</address>
<number>123</number>
<tell>123456</tell>
<c1>
<name>علی</name>
<family>حسنی</family>
</c1>
<c1>
<name>مرتضی</name>
<family>حسنی</family>
</c1>
</b1>
<b1>
<address>2تست</address>
<number>123</number>
<tell>123456</tell>
<c1>
<name>رضا</name>
<family>رضایی</family>
</c1>
</b1>
<b1>
<address>3تست</address>
<number>123</number>
<tell>123456</tell>
<c1>
<name>حسین</name>
<family>حسینی</family>
</c1>
</b1>
<n1>
<address>3تست</address>
<number>123</number>
<tell>123456</tell>
</n1>
</t1>

Master_Power
شنبه 03 مرداد 1394, 18:16 عصر
سلام

نمونه زیر را ببینید
محتویات فایل XML

<?xml version="1.0" encoding="utf-8" ?>
<note>
<to> Hamed </to>
<from>Ali</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

نحوه گرفتن خروجی

<html>
<body>
<h1> CenterWeb.IR</h1>
<div>
<b>To:</b> <span id="to"></span><br />
<b>From:</b> <span id="from"></span><br />
<b>Message:</b> <span id="message"></span>
</div>

<script>
if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest(); // ساخت یک شی جدید ایجکس برای ارتباط با سرور
}
xmlhttp.open("GET", "note.xml", false); // و خواندن آن XML باز کردن فایل
xmlhttp.send( ); // ارسال اطلاعات به سرور
xmlDoc = xmlhttp.responseXML; // xmlDoc در شی XML تجزیه و ریختن محتویات فایل
document.getElementById("to").innerHTML = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML = xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML = xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
</script>
</body>
</html>

sepehrazimi
شنبه 03 مرداد 1394, 18:24 عصر
اینو دیدم ولی من برای php میخوام هم این که چند تا تودرتو باشه نمیشه .

Unique
شنبه 03 مرداد 1394, 18:36 عصر
خود php که xml parser داره ، کلاس های دیگه هم برای خوندن xml هست.

این یکیش (http://php.net/manual/en/book.simplexml.php) و اینم یکی دیگه (http://php.net/manual/en/book.xml.php).

اینم یک نمونه که میریزه توی آرایه :


<?php
$file = 'simple.xml';
$stack = array();

function startTag($parser, $name, $attrs)
{
global $stack;
$tag=array("name"=>$name,"attrs"=>$attrs);
array_push($stack,$tag);

}

function cdata($parser, $cdata)
{
global $stack,$i;

if(trim($cdata))
{
$stack[count($stack)-1]['cdata']=$cdata;
}
}

function endTag($parser, $name)
{
global $stack;
$stack[count($stack)-2]['children'][] = $stack[count($stack)-1];
array_pop($stack);
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "cdata");

$data = xml_parse($xml_parser,file_get_contents($file));
if(!$data) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}

xml_parser_free($xml_parser);

print("<pre>\n");
print_r($stack);
print("</pre>\n");
?>

hamedarian2009
شنبه 03 مرداد 1394, 18:40 عصر
حتما نیازه با PHP باشه؟ چون با جی کوئری هم میتونید اینکارو بکنید و بهتر اینه برای هر عملیاتی سرور رو درگیر نکنید

sepehrazimi
شنبه 03 مرداد 1394, 18:46 عصر
این کدی که گذاشتید میتونید یکم توضیح بدین یا فایل xml رو هم دارید که ببینم به چه صورت دریافت میکنه

sepehrazimi
شنبه 03 مرداد 1394, 18:50 عصر
خود php که xml parser داره ، کلاس های دیگه هم برای خوندن xml هست.

این یکیش (http://php.net/manual/en/book.simplexml.php) و اینم یکی دیگه (http://php.net/manual/en/book.xml.php).

اینم یک نمونه که میریزه توی آرایه :


<?php
$file = 'simple.xml';
$stack = array();

function startTag($parser, $name, $attrs)
{
global $stack;
$tag=array("name"=>$name,"attrs"=>$attrs);
array_push($stack,$tag);

}

function cdata($parser, $cdata)
{
global $stack,$i;

if(trim($cdata))
{
$stack[count($stack)-1]['cdata']=$cdata;
}
}

function endTag($parser, $name)
{
global $stack;
$stack[count($stack)-2]['children'][] = $stack[count($stack)-1];
array_pop($stack);
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "cdata");

$data = xml_parse($xml_parser,file_get_contents($file));
if(!$data) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}

xml_parser_free($xml_parser);

print("<pre>\n");
print_r($stack);
print("</pre>\n");
?>

این کدی که گذاشتید میتونید یکم توضیح بدین یا فایل xml رو هم دارید که ببینم به چه صورت دریافت میکنه

Unique
شنبه 03 مرداد 1394, 19:48 عصر
کد را کپی کن توی یک فایل php بعدش مسیر فایل xml خودت را بده توی خط زیر و خروجی را ببین :

$data = xml_parse($xml_parser,file_get_contents(path/to/xml/file));