PHP aşağıdaki kodu artırmak için nasıl

5 Cevap php

İşte admin_xml.php XML veri göndermek için kullanıyorum basit bir şeklidir

<form name="review" action="admin_xml.php" method="post">
 <textarea name="xml" cols="40" rows="10"></textarea>
 <input class="submit" type="submit" value="Submit Request">
</form>


İşte MySQL Veritabanı gelen verileri almak için girmek XML

<?xml version="1.0" encoding="UTF-8"?>
<GetOrdersIds>
    <Credentials>
        <Username>my_username</Username>
        <Password>my_password</Password>
    </Credentials>
    <Criterions>
        <OrderNumber></OrderNumber>
        <StartDate>2009-01-01</StartDate>
        <EndDate>2009-07-01</EndDate>
    </Criterions>
</GetOrdersIds>


İşte xml etiketlerini ayıklar php kodu:

<?php    

$text_all = "<?xml version=\"1.0\"?>\r\n<GetOrdersIds version=\"1.0\">\r\n<Credentials>\r\n<Username>my_username</Username>\r\n<Password>my_password</Password>\r\n</Credentials>\r\n<Criterions>\r\n<OrderNumber></OrderNumber>\r\n<StartDate>2009-01-01</StartDate>\r\n<EndDate>2009-07-01</EndDate>\r\n</Criterions>\r\n</GetOrdersIds>";

$field = "Criterions";

$result = substr($text_all, strpos($text_all, "<".$field.">")+strlen("<".$field.">"), strpos($text_all, "</".$field.">")-strlen("<".$field.">")-strpos($text_all, "<".$field.">"));


?>

Yukarıdaki php kod sonucu:

<OrderNumber></OrderNumber>
<StartDate>2009-01-01</StartDate>
<EndDate>2009-07-01</EndDate>

Komut dosyası çalıştırıldığında, php kod benim mysql veri geçer ve Başlangıç ​​Tarihi ve yukarıda verilen Bitiş Tarihi arasındaki tüm siparişleri ayıklar.


Aynı işlevi gerçekleştirir, böylece aşağıdaki php kodu geliştirmek daha iyi bir yolu var mı:

$result = substr($text_all, strpos($text_all, "<".$field.">")+strlen("<".$field.">"), strpos($text_all, "</".$field.">")-strlen("<".$field.">")-strpos($text_all, "<".$field.">"));

Bu xml veri arar ve tüm etiketleri alır kodudur.

GÜNCELLEME:

Herkes SimpleXMLElement $ sonuç kodu sayabilir misiniz?

5 Cevap

Bazı geçici vars yardımcı ve aynı zamanda daha kolay okumak için yapacaktır.

$result = substr($text_all, strpos($text_all, "<".$field.">")+strlen("<".$field.">"), strpos($text_all, "</".$field.">")-strlen("<".$field.">")-strpos($text_all, "<".$field.">"));

Için yeniden olabilir.

$tagLen = strlen('<'.$field.'>');
$openTag = strpos($text_all, '<'.$field.'>');
$closeTag = strpos($text_all, '</'.$field.'>', $openTag);

$result = substr($text_all, $openTag + $tagLen, $closeTag - $tagLen - $openTag);

veya kullanım SimpleXML

$doc = simplexml_load_string($text_all);
echo $doc->Criterions->asXML();

İsterseniz tek değerler kullanabilirsiniz.

$doc = simplexml_load_string($text_all);

echo $doc->Criterions->OrderNumber;
echo $doc->Criterions->StartDate;
echo $doc->Criterions->EndDate;

Eğer XML öğe istiyorsanız o asXML kullanın ():

$doc = simplexml_load_string($text_all);

echo $doc->Criterions->OrderNumber->asXML();
echo $doc->Criterions->StartDate->asXML();
echo $doc->Criterions->EndDate->asXML();

Ile SimpleXML,

<?php
$xmlSTR = '<?xml version="1.0" encoding="UTF-8"?>
<GetOrdersIds>
    <Credentials>
        <Username>my_username</Username>
        <Password>my_password</Password>
    </Credentials>
    <Criterions>
        <OrderNumber></OrderNumber>
        <StartDate>2009-01-01</StartDate>
        <EndDate>2009-07-01</EndDate>
    </Criterions>
</GetOrdersIds>';

$xml = new SimpleXMLElement($xmlSTR);

echo $xml->Credentials->Username;

//To see the entire structure print_r($xml); as php can access objects as arrays

simplexml modülü bir göz var.

SimpleXML bu verileri ayıklamak gibi bir XML çözümleyici kullanın:

$doc = simplexml_load_string($_POST['xml']);
$OrderNumber = $doc->Criterions->OrderNumber;
$StartDate = $doc->Criterions->StartDate;
$EndDate = $doc->Criterions->EndDate;

XML dizesi $text_all (Sizin örnekte göstermek gibi) denilen değişken depolanan varsayarsak, bu adam ... :-) istediğini elde edecek

$mysql_stuff = '';
$xml = new SimpleXMLElement($text_all);

foreach($xml->Criterions->children() as $criterion) {
    $mysql_stuff .= $criterion->asXML()."\n";
}
echo $mysql_stuff;

$mysql_stuff şimdi içerecektir:

<OrderNumber/>
<StartDate>2009-01-01</StartDate>
<EndDate>2009-07-01</EndDate>

Bu test edilmiş ve çalışır. Ben bu soruya cevap umuyoruz!