За последние 24 часа нас посетили 11353 программиста и 984 робота. Сейчас ищут 418 программистов ...

Валидация и обработка XML в массиве.

Тема в разделе "Решения, алгоритмы", создана пользователем thislegion, 30 май 2022.

  1. thislegion

    thislegion Новичок

    С нами с:
    12 май 2022
    Сообщения:
    7
    Симпатии:
    0
    Не могу разобраться. Есть массив, в нем строки xml формата. Второй элемент массива явно не XML, но при этом без проблем проходит валидацию. Фореч обрабатыает только первый элемент. Какие могут быть пути решения и почему 2 элемент проходит валидацию вообще не пойму.

    PHP:
    1. <?php
    2.  
    3. $arr = array
    4. (
    5.     1 => '<?xml version="1.0" encoding="utf-8"?>        <rates>
    6.                <item>
    7.                                <from>BTC</from>  
    8.                                <to>SBERRUB</to>  
    9.                                <in>1</in>  
    10.                                <out>2145271.37253</out>  
    11.                                <amount>19353.323805</amount>  
    12.                                <minamount>0.005 BTC</minamount>  
    13.                                <maxamount>0.5 BTC</maxamount>  
    14.                                <param>manual</param>  
    15.                            </item>
    16.                    <item>
    17.                                <from>SBERRUB</from>  
    18.                                <to>BTC</to>  
    19.                                <in>2407437.2036</in>  
    20.                                <out>1</out>  
    21.                                <amount>18.729196</amount>  
    22.                                <minamount>1000 RUB</minamount>  
    23.                                <maxamount>10000 RUB</maxamount>  
    24.                                <param>manual</param>  
    25.                            </item>
    26.                    <item>
    27.                                <from>SBPbub</from>  
    28.                                <to>BTC</to>  
    29.                                <in>2407437.2036</in>  
    30.                                <out>1</out>  
    31.                                <amount>18.729196</amount>  
    32.                                <minamount>1000 RUB</minamount>  
    33.                                <maxamount>10000 RUB</maxamount>  
    34.                                <param>manual</param>  
    35.                            </item>
    36.                    <item>
    37.                                <from>QWRUB</from>  
    38.                                <to>BTC</to>  
    39.                                <in>2407437.2036</in>  
    40.                                <out>1</out>  
    41.                                <amount>18.729196</amount>  
    42.                                <minamount>1000 RUB</minamount>  
    43.                                <maxamount>10000 RUB</maxamount>  
    44.                                <param>manual</param>  
    45.                            </item>
    46.      
    47.            </rates>',
    48. 2 => '<!DOCTYPE html>
    49. <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
    50. <!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
    51. <!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
    52. <!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
    53. <head>
    54.  
    55. <title>Please Wait... | Cloudflare</title> ',
    56.  
    57. 3 => '<?xml version="1.0" encoding="utf-8"?>        <rates>
    58.      
    59.                            <item>
    60.                                <from>QWRUB</from>  
    61.                                <to>BTC</to>  
    62.                                <in>2407437.2036</in>  
    63.                                <out>1</out>  
    64.                                <amount>18.729196</amount>  
    65.                                <minamount>1000 RUB</minamount>  
    66.                                <maxamount>10000 RUB</maxamount>  
    67.                                <param>manual</param>  
    68.                            </item>
    69.                          
    70.                    <item>
    71.                                <from>SBERRUB</from>  
    72.                                <to>BTC</to>  
    73.                                <in>2407437.2036</in>  
    74.                                <out>1</out>  
    75.                                <amount>18.729196</amount>  
    76.                                <minamount>1000 RUB</minamount>  
    77.                                <maxamount>10000 RUB</maxamount>  
    78.                                <param>manual</param>  
    79.                            </item>
    80.                    <item>
    81.                                <from>SBPRUB</from>  
    82.                                <to>BTC</to>  
    83.                                <in>2407437.2036</in>  
    84.                                <out>1</out>  
    85.                                <amount>18.729196</amount>  
    86.                                <minamount>1000 RUB</minamount>  
    87.                                <maxamount>10000 RUB</maxamount>  
    88.                                <param>manual</param>  
    89.                            </item>
    90.            </rates>',
    91.  
    92. );
    93. //проверка на валидацию второго значения массива
    94.     $xml = XMLReader::XML($arr[2]);
    95.  
    96.     $xml->setParserProperty(XMLReader::VALIDATE, true);
    97.  
    98.     var_dump($xml->isValid()); echo "\n";
    99.  
    100. foreach($arr as $key => $value){
    101.  
    102. $course = new SimpleXMLElement($arr[$key]);
    103. //echo $course->item[0]->from . "\n";
    104. //echo $course->item[0]->to . "\n";
    105.  
    106.     foreach($course as $value){
    107.     echo  $value->from . " - $key\n";
    108.     echo  $value->to . " - $key\n\n";
    109.  
    110.    }
    111. }
    112.  
    113. print_r($course);
    114.  
    115.  
    116. ?>
     
  2. thislegion

    thislegion Новичок

    С нами с:
    12 май 2022
    Сообщения:
    7
    Симпатии:
    0
    Господа, расходимся. Нашел решение, выкладываю
    PHP:
    1. class XmlParser
    2. {
    3.     /**
    4.      * @param string $xmlFilename Path to the XML file
    5.      * @param string $version 1.0
    6.      * @param string $encoding utf-8
    7.      * @return bool
    8.      */
    9.     public function isXMLFileValid($xmlFilename, $version = '1.0', $encoding = 'utf-8')
    10.     {
    11.         $xmlContent = file_get_contents($xmlFilename);
    12.         return $this->isXMLContentValid($xmlContent, $version, $encoding);
    13.     }
    14.     /**
    15.      * @param string $xmlContent A well-formed XML string
    16.      * @param string $version 1.0
    17.      * @param string $encoding utf-8
    18.      * @return bool
    19.      */
    20.     public function isXMLContentValid($xmlContent, $version = '1.0', $encoding = 'utf-8')
    21.     {
    22.         if (trim($xmlContent) == '') {
    23.             return false;
    24.         }
    25.         libxml_use_internal_errors(true);
    26.         $doc = new DOMDocument($version, $encoding);
    27.         $doc->loadXML($xmlContent);
    28.         $errors = libxml_get_errors();
    29.         libxml_clear_errors();
    30.         return empty($errors);
    31.     }
    32. }