نرم افزار مترجم

saalek110

Well-Known Member
حالا نمی خواهیم با print_r کار کنیم. می خواهیم تک تک کار کنیم.(فایل همان فایل پست قبل)
کد:
PHP:
<?php
$xml=simplexml_load_file("note.xml") or die("Error: Cannot create object");
echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo $xml->body;
?>

اجرا:
Tove
Jani
Reminder
Don't forget me this weekend!

پس در اینجا می بینید توانستیم یک فایل xml را بخوانیم و به قسمتهای مورد نظر خود دست یابیم.
 

saalek110

Well-Known Member
فایل xml بعدی اینه:

PHP:
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en-us">XQuery Kick Start</title>
    <author>James McGovern</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="WEB">
    <title lang="en-us">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>
 

saalek110

Well-Known Member
کد:
PHP:
$xml=simplexml_load_file("books.xml") or die("Error: Cannot create object");
echo $xml->book[0]->title . "<br>";
echo $xml->book[1]->title;
?>

اجرا:
Everyday Italian
Harry Potter

تفاوت این مثال با قبلی اینه که فایل xml ما رکوردهای بیشتری دارد. رکورد در اینجا <book> است.
 

saalek110

Well-Known Member
PHP:
<?php
$xml=simplexml_load_file("books.xml") or die("Error: Cannot create object");
foreach($xml->children() as $books) {
  echo $books->title . ", ";
  echo $books->author . ", ";
  echo $books->year . ", ";
  echo $books->price . "<br>";
}
?>

Everyday Italian, Giada De Laurentiis, 2005, 30.00
Harry Potter, J K. Rowling, 2005, 29.99
XQuery Kick Start, James McGovern, 2003, 49.99
Learning XML, Erik T. Ray, 2003, 39.95
 

saalek110

Well-Known Member
PHP:
<?php
$xml=simplexml_load_file("books.xml") or die("Error: Cannot create object");
echo $xml->book[0]['category'] . "<br>";
echo $xml->book[1]->title['lang'];
?>

COOKING
en
 

saalek110

Well-Known Member
PHP:
<?php
$xml=simplexml_load_file("books.xml") or die("Error: Cannot create object");
foreach($xml->children() as $books) {
  echo $books->title['lang'];
  echo "<br>";
}
?>

en
en
en-us
en-us
 

saalek110

Well-Known Member
در این قسمت به معرفی کوتاهی در مورد چگونگی کاربا فایل های XML در زبان phpمی پردازیم .

در PHP ، روش هایی مثل

XML Expat Parser

و XML DOM

و XML SimpleXML

برای پردازش اطلاعات فایل های XML وجود دارد،





سالک : من تا اینجا روش simple را گفتم و وارد دو روش دیگر نشدم.
 
آخرین ویرایش:

saalek110

Well-Known Member

DOM چیست ؟​

در ابتدا برای اطلاعات نیاز است که بدانیم که DOM مخفف عبارت Document Object Model نیز است. DOM یک پلت فرم متقابل و استاندارد به شمار می رود که از آن به عنوان یک واسط برنامه نویسی برای اسناد HTML و XML یاد می شود. که می تواند نحوه دسترسی به داده ها و دستکاری آنها را کنترل کند.
به وسیله DOM می توان Document ها را ساخت و هچنین آنها را مدیریت کرد.
ساختار این Document ها چیزی شبیه به یک درخت می باشد.

 

saalek110

Well-Known Member

The SimpleXML PHP Extension

The SimpleXML PHP extension provides a complete toolset which you can use to read, write and parse XML documents in your PHP applications. It’s important to note that the SimpleXML extension requires PHP 5 at a minimum. Also, it requires the libxml PHP extension.

The SimpleXML extension is enabled by default, but if you want to check if it's enabled in your PHP installation, you can check it quickly by using the phpinfo() function.




g3.png
 

saalek110

Well-Known Member

تجزیه کننده SimpleXML​

SimpleXML یم پارسر از نوع درختی می باشد. (tree-based parser)

SimpleXML روشی آسان برای دریافت نام عناصر، ویژگی ها و محتوای متنی می باشد.

SimpleXML سند xml را به ساختار داده ای تبدیل می کند که می توانید توسط مجموعه ای از ارایه ها و اشیاء آن را بازنویسی کنید.

در مقایسه با پارسر های DOM و SimpleXML ، Expat حجم کد کمتری برای خواندن داده از یک عنصر را تولید می کند.

 

saalek110

Well-Known Member

XML در PHP​

XML روشی جهت ساختاردهی به داده ها برای به اشتراک گذاری بین وب سایت ها است. چندین تکنولوژی دنیای وب مانند RSS و Podcast به صورت XML نوشته شده اند. خود XML نیز شباهت زیادی به HTML دارد با این تفاوت که شما تگ های خودتان را می سازید.

برای خواندن، به روز رسانی، ساختن و ویرایش XML به XML parser (تجزیه گر XML) نیاز دارید. زبان PHP دو نوع XML parser را در اختیار شما قرار می دهد:

  • Tree-Based Parsers (تجزیه گرهای درختی)
  • Event-Based Parsers (تجزیه گرهای رویداد-محور)

Event-Based Parsers و Tree-Based Parsers​

تجزیه گر های درختی (Tree-based) تمام سند را در مموری نگه می دارند و ساختار XML را تبدیل به یک ساختار درختی می کنند. سپس تمام سند را بررسی کرده و به شما اجازه ی دسترسی به عناصر مختلف را می دهد (DOM). این نوع تجزیه گرها انتخاب بهتری برای XML های کوچک هستند اما اگر XML شما بزرگ باشد باعث بروز مشکلات متعددی خواهند شد.

نمونه هایی از تجزیه گرهای درختی:

  • SimpleXML
  • DOM
از طرفی تجزیه گرهای رویداد-محور (Event-based) تمام سند را در مموری نگه نمی دارند بلکه node ها را دانه دانه می خوانند و به شما اجازه می دهند که در لحظه با آن ها تعامل داشته باشید بنابراین زمانی که به node بعدی برسید node قبلی دور انداخته می شود. این نوع تجزیه گرها مناسب XML های بزرگ هستند؛ سریع تر تجزیه می کنند و مموری کمتری نیز مصرف می کنند.

نمونه هایی از تجزیه گر های رویداد-محور:

  • XMLReader
  • XML Expat Parser
 

saalek110

Well-Known Member

Import کردن XML به MySQL در PHP​


در برنامه نویسی وارد کردن یا همان Import کردن XML به MySQL می تواند بصورت دستی انجام شود.اما, در این آموزش PHP , قصد داریم به شما نحوه insert کردن داده های فایل XML به دیتابیس MySQL را توسط PHP نشان بدیم.

Node ها یا همان تگ های داخلی فایل XML به عنوان ستون های جدول دیتابیس درنظر گرفته می شوند و بنابراین داده های هر یک از node ها به عنوان مقادیر در جدول وارد خواهند شد.

در این مثال, یک فایل input.xml دارید که شامل آیتم هایی با node های فرزند به نام های title , description , links , keywords را دارند. این فایل برای دریافت آبجکت فایل به منظور پردازش داده های XML استفاده می شود.

سپس, کد PHP هر یک از این آیتم های خوانده شده را برای دریافت node های فرزند و داده های آنها در یک حلقه تکرار می شوند. با این داده ها, کوئری insert ساخته و برای کپی داده های XML در دیتابیس اجرا می شود.

فایل داده XML​

XML زیر به عنوان ورودی به اسکریپت php ما برای Import کردن XML به MySQL استفاده شده است. این فایل شامل ۳ المنت XML با node های فرزند title , description , links , keywords هستند.

همانطور که نود های فرزند به عنوان ستون های جدول دیتابیس درنظر گرفته می شود, یک جدول با همین نام ها در دیتابیس ایحاد کردیم. زمانی که این ورودی XML را تجزیه (parse) کردیم, داده های بین این node های فرزند در ستون های همنام خود در دیتابیس قرار می گیرند.



PHP:
<?xml version="1.0" encoding="UTF-8"?>
 <items>
     <item>
         <title>PHP Shopping Cart with PayPal Payment Gateway Integration</title>
         <link>https://phppot.com/php/php-shopping-cart-with-paypal-payment-gateway-integration/</link>
         <description>Shopping cart checkout with payment gateway integration (PayPal) is a most wanted article for the PHP shopping cart coders. In this article, we are going to integrate PayPal payment gateway with the shopping cart.</description>
         <keywords>Shopping,Cart</keywords>
     </item>
     <item>
         <title>Responsive Contact Form with PHP</title>
         <link>https://phppot.com/php/responsive-contact-form-with-php/</link>
         <description>The responsive contact form is designed to fit various viewport in different width. I used CSS media queries to design this responsive contact form.</description>
         <keywords>Contact-Form, Responsive</keywords>
     </item>
     <item>
         <title>Loading Dynamic Content on a Bootstrap Modal using jQuery</title>
         <link>https://phppot.com/jquery/loading-dynamic-content-on-a-bootstrap-modal-using-jquery/</link>
         <description>Modal window can be shown in various ways by using jQuery, Bootstrap and others. In this tutorial, we are going to show the Bootstrap modal. </description>
         <keywords>Modal-Window, Bootstrap</keywords>
     </item>
 </items>

PHP:
CREATE TABLE IF NOT EXISTS `tbl_tutorials` (
`item_id` int(11) NOT NULL,
  `title` varchar(100) NOT NULL,
  `link` varchar(100) NOT NULL,
  `description` varchar(400) NOT NULL,
  `keywords` varchar(50) NOT NULL
);

تجزیه XML و Import کردن XML به MySQL توسط PHP​

در این کد PHP , ما از تابع simplexml_load_file برای parse کردن و ساخت هندل فایل استفاده می کنیم. با استفاده از این handle آیتم های XML در هر بار تکرار حلقه خوانده می شود. سپس کوئری insert را با استفاده از داده های خوانده شده را می سازیم.

PHP:
<?php
$conn = mysqli_connect("localhost", "root", "test", "phpsamples");
 
$affectedRow = 0;
 
$xml = simplexml_load_file("input.xml") or die("Error: Cannot create object");
 
foreach ($xml->children() as $row) {
    $title = $row->title;
    $link = $row->link;
    $description = $row->description;
    $keywords = $row->keywords;
    
    $sql = "INSERT INTO tbl_tutorials(title,link,description,keywords) VALUES ('" . $title . "','" . $link . "','" . $description . "','" . $keywords . "')";
    
    $result = mysqli_query($conn, $sql);
    
    if (! empty($result)) {
        $affectedRow ++;
    } else {
        $error_message = mysqli_error($conn) . "\n";
    }
}
?>
<h2>Insert XML Data to MySql Table Output</h2>
<?php
if ($affectedRow > 0) {
    $message = $affectedRow . " records inserted";
} else {
    $message = "No records inserted";
}
 
?>

بعد از اضافه کردن داده ها در دیتابیس, یک پیام مبنی بر اینکه چند سطر جدید در دیتابیس اضافه شده است, به کاربر نمایش می دهیم. در صروت وجود هرگونه خطایی, متن پیام خطا به کاربر نشان داده می شود.

نمایش خروجی Import کردن XML به MySQL در PHP​

این کد شرایط پیام برگشتی بعد از انجام عملیات افزودن داده های XML در جدول دیتابیس را بررسی می کند و بنابر پیام برگشتی نتیجه کوئری insert را با استایل های خاص خود به کاربر نمایش می دهد.

PHP:
<style>
body {
    max-width: 550px;
    font-family: Arial;
}
 
.affected-row {
    background: #cae4ca;
    padding: 10px;
    margin-bottom: 20px;
    border: #bdd6bd 1px solid;
    border-radius: 2px;
    color: #6e716e;
}
 
.error-message {
    background: #eac0c0;
    padding: 10px;
    margin-bottom: 20px;
    border: #dab2b2 1px solid;
    border-radius: 2px;
    color: #5d5b5b;
}
</style>
<div class="affected-row">
    <?php  echo $message; ?>
</div>
<?php if (! empty($error_message)) { ?>
<div class="error-message">
    <?php echo nl2br($error_message); ?>
</div>
<?php } ?>
 

saalek110

Well-Known Member
تبدیل فایل tei دیکشنری به فایل xml برای ساده کردن کار:


فایل دیکشنری ما پسوند tei دارد
فایل tei تفاوتها و شباهتهایی با فایل xml دارد.

سالک: من اول فایل tie را در ادیتورم تغییر دادم تا بشود یک فایل xml
بعد با کد زیر مندرجات فایل را خواندم:
PHP:
$xml=simplexml_load_file("sample.xml") or die("Error: Cannot create object");
echo  ( $xml->body->entry[2]->form->orth);

نتیجه اجرا:
, Fehlerortungsgerät

کلمه بالا لغت آلمانی سومین entry است. خودتان می توانید در فایل sample.xml در زیر پیدا کنید.


من فقط 6 یا 7 تا از entry ها را در فایل sample.xml ریختم تا کار سبک باشد.
فایل sample.xml این است : (می بینید که header فایل tei را من حذف کرده ام و به جز enrty ها دو تگ text و body فقط باقی مانده.)
PHP:
<?xml version="1.0" encoding="UTF-8"?>

<text xml:lang="en">
  <body>
<entry xml:id="Fehlernummer.1">
        <form>
          <orth>Fehlernummer</orth>
        </form>
        <gramGrp>
          <gen>fem</gen>
          <pos>n</pos>
          <number>sg</number>
        </gramGrp>
        <sense>
          <cit type="trans">
            <quote xml:lang="en">error number</quote>
            <gramGrp>
              <pos>n</pos>
            </gramGrp>
          </cit>
          <xr type="see">
            <ref target="#Fehlernummern.1">Fehlernummern</ref>
          </xr>
        </sense>
      </entry>
      <entry xml:id="Fehlernummern.1">
        <form>
          <orth>Fehlernummern</orth>
        </form>
        <gramGrp>
          <number>pl</number>
        </gramGrp>
        <sense>
          <cit type="trans">
            <quote xml:lang="en">error numbers</quote>
          </cit>
          <xr type="see">
            <ref target="#Fehlernummer.1">Fehlernummer</ref>
          </xr>
        </sense>
      </entry>
      <entry xml:id="Fehlerortungsgerät.1">
        <form>
          <orth>Fehlerortungsgerät</orth>
        </form>
        <gramGrp>
          <gen>neut</gen>
          <pos>n</pos>
          <number>sg</number>
        </gramGrp>
        <sense>
          <usg type="reg">techn.</usg>
          <cit type="trans">
            <quote xml:lang="en">fault locating equipment</quote>
            <gramGrp>
              <pos>n</pos>
            </gramGrp>
          </cit>
        </sense>
      </entry>
      <entry xml:id="Fehlerortungsschleife.1">
        <form>
          <orth>Fehlerortungsschleife</orth>
        </form>
        <gramGrp>
          <gen>fem</gen>
          <pos>n</pos>
          <number>sg</number>
        </gramGrp>
        <sense>
          <usg type="reg">techn.</usg>
          <cit type="trans">
            <quote xml:lang="en">fault locating loop</quote>
            <gramGrp>
              <pos>n</pos>
            </gramGrp>
          </cit>
        </sense>
      </entry>
      <entry xml:id="Fehlerortungsverfahren.1">
        <form>
          <orth>Fehlerortungsverfahren</orth>
        </form>
        <gramGrp>
          <gen>neut</gen>
          <pos>n</pos>
          <number>sg</number>
        </gramGrp>
        <sense>
          <usg type="reg">techn.</usg>
          <cit type="trans">
            <quote xml:lang="en">fault locating mode</quote>
            <gramGrp>
              <pos>n</pos>
            </gramGrp>
          </cit>
        </sense>
      </entry>
      <entry xml:id="Fehlerortungssignal.1">
        <form>
          <orth>Fehlerortungssignal</orth>
        </form>
        <gramGrp>
          <gen>neut</gen>
          <pos>n</pos>
          <number>sg</number>
        </gramGrp>
        <sense>
          <cit type="trans">
            <quote xml:lang="en">fault locating signal</quote>
            <gramGrp>
              <pos>n</pos>
            </gramGrp>
          </cit>
          <xr type="see">
            <ref target="#Fehlerortungssignale.1">Fehlerortungssignale</ref>
          </xr>
        </sense>
      </entry>
      <entry xml:id="Stipendium.1">
        <form>
          <orth>Stipendium</orth>
        </form>
        <gramGrp>
          <gen>neut</gen>
          <pos>n</pos>
          <number>sg</number>
        </gramGrp>
        <sense>
          <usg type="dom">stud.</usg>
          <cit type="trans">
            <quote xml:lang="en">grant</quote>
            <gramGrp>
              <pos>n</pos>
            </gramGrp>
          </cit>
          <cit type="trans">
            <quote xml:lang="en">fellowship</quote>
            <gramGrp>
              <pos>n</pos>
            </gramGrp>
          </cit>
          <xr type="see">
            <ref target="#Stipendien.1">Stipendien</ref>
          </xr>
          <note>allgemein</note>
        </sense>
      </entry>

          </body>
  </text>

البته بحث فایلهای tei گویا به xls و xlst در php مربوط است.
ولی من دیگه نخواستم وارد بحثهای xls و xlst بشویم و فایل tei را به شکل دستی به xml تبدیل کردم.
 
آخرین ویرایش:

saalek110

Well-Known Member
دست انداز:
همین که دو تگ text و body اطراف entry ها وجود دارد
باید حواستان باشد و در خواندن اینها را لحاظ کنید. من نوشتم:
PHP:
echo  ( $xml->body->entry[2]->form->orth);

ولی اگر کلمه body را ننوشته بودم نتیجه فوق حاصل نمی شد.

کلا حواستان به تگ های بالاتر (در اینجا body ) باشد. و بعد بیایید تگ های مورد نظر خود.
 

saalek110

Well-Known Member
PHP:
print_r($xml);

کد:
SimpleXMLElement Object ( [body] => SimpleXMLElement Object ( [entry] => Array (



[0] => SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [orth] => Fehlernummer )
[gramGrp] => SimpleXMLElement Object ( [gen] => fem [pos] => n [number] => sg ) [sense] =>
SimpleXMLElement Object ( [cit] => SimpleXMLElement Object ( [@attributes] => Array ( [type] => trans )
[quote] => error number [gramGrp] => SimpleXMLElement Object ( [pos] => n ) ) [xr] => SimpleXMLElement Object ( [@attributes] =>
Array ( [type] => see ) [ref] => Fehlernummern ) ) )



[1] => SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [orth] => Fehlernummern )
[gramGrp] => SimpleXMLElement Object ( [number] => pl ) [sense] => SimpleXMLElement Object ( [cit] =>
SimpleXMLElement Object ( [@attributes] => Array ( [type] => trans ) [quote] => error numbers ) [xr] =>
SimpleXMLElement Object ( [@attributes] => Array ( [type] => see ) [ref] => Fehlernummer ) ) )


[2] => SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [orth] => Fehlerortungsgerät )
[gramGrp] => SimpleXMLElement Object ( [gen] => neut [pos] => n [number] => sg ) [sense] =>
SimpleXMLElement Object ( [usg] => techn. [cit] => SimpleXMLElement Object ( [@attributes] =>
Array ( [type] => trans ) [quote] => fault locating equipment [gramGrp] => SimpleXMLElement Object ( [pos] => n ) ) ) )


[3] => SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [orth] => Fehlerortungsschleife )
[gramGrp] => SimpleXMLElement Object ( [gen] => fem [pos] => n [number] => sg ) [sense] =>
SimpleXMLElement Object ( [usg] => techn. [cit] => SimpleXMLElement Object ( [@attributes] =>
Array ( [type] => trans ) [quote] => fault locating loop [gramGrp] => SimpleXMLElement Object ( [pos] => n ) ) ) )


[4] => SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [orth] => Fehlerortungsverfahren )
[gramGrp] => SimpleXMLElement Object ( [gen] => neut [pos] => n [number] => sg ) [sense] =>
SimpleXMLElement Object ( [usg] => techn. [cit] => SimpleXMLElement Object ( [@attributes] =>
Array ( [type] => trans ) [quote] => fault locating mode [gramGrp] => SimpleXMLElement Object ( [pos] => n ) ) ) )


[5] => SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [orth] => Fehlerortungssignal )
[gramGrp] => SimpleXMLElement Object ( [gen] => neut [pos] => n [number] => sg ) [sense] =>
SimpleXMLElement Object ( [cit] => SimpleXMLElement Object ( [@attributes] => Array ( [type] => trans )
[quote] => fault locating signal [gramGrp] => SimpleXMLElement Object ( [pos] => n ) ) [xr] =>
SimpleXMLElement Object ( [@attributes] => Array ( [type] => see ) [ref] => Fehlerortungssignale ) ) )


[6] => SimpleXMLElement Object ( [form] => SimpleXMLElement Object ( [orth] => Stipendium )
[gramGrp] => SimpleXMLElement Object ( [gen] => neut [pos] => n [number] => sg ) [sense] =>
SimpleXMLElement Object ( [usg] => stud. [cit] => Array ( [0] => SimpleXMLElement Object ( [@attributes] =>
Array ( [type] => trans ) [quote] => grant [gramGrp] => SimpleXMLElement Object ( [pos] => n ) ) [1] =>
SimpleXMLElement Object ( [@attributes] => Array ( [type] => trans ) [quote] => fellowship [gramGrp] =>
SimpleXMLElement Object ( [pos] => n ) ) ) [xr] => SimpleXMLElement Object ( [@attributes] =>
Array ( [type] => see ) [ref] => Stipendien ) [note] => allgemein ) ) ) ) )



PHP:
<?php

$xml=simplexml_load_file("sample.xml") or die("Error: Cannot create object");
print_r($xml);

?>

با print_r خود @xml که قبلا با simplexml_load_file فایل را load کرده همان طور که در بالا می بینید آرایه درختی فایل چاپ می شود.

هر entry در فایل ما یک لغت آلمانی است که ترجمه انگلیسی آن و بعضی اطلاعات دیگر برای هر لغت درج شده.


با چاپ کل آرایه به شکل بالا شما راهنما دارید که چطور دنبال هر مورد باشید.
 
آخرین ویرایش:

saalek110

Well-Known Member
برای چاپ ترجمه ها باید بنویسیم:
PHP:
echo   $xml->body->entry[6]->sense->cit[0]->quote. "<br>";
echo   $xml->body->entry[6]->sense->cit[1]->quote. "<br>";

grant
fellowship

دو ترجمه برای این لغت آلمانی داشتیم. گاهی بیشتر هم هست مثلا 4 تا. برای یافتن تعداد ترجمه ها بنویسید:
PHP:
echo   count(              $xml->body->entry[6]->sense->cit             );
اجرا:
2
 

saalek110

Well-Known Member
برنامه ریختن 7 لغت با معنی در دیتابیس:
PHP:
<?php
require "conn.php";
$xml=simplexml_load_file("sample.xml") or die("Error: Cannot create object");

$en_count=count(              $xml->body->entry           );
for ($x = 0; $x < $en_count; $x++) {
  $word=$xml->body->entry[$x]->form->orth;
  $w_translate=$xml->body->entry[$x]->sense->cit[0]->quote;
 
          $sql = "INSERT INTO `german` (`number`, `word`, `t1`) VALUES ($x,'$word','$w_translate')";
       $result = mysqli_query($conn ,$sql);
  }
?>

فقط معنی اول را توجه کردیم و بقیه معانی را فعلا ندیده گرفتیم.

اجرا:

result.jpg
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا