За последние 24 часа нас посетили 22832 программиста и 1262 робота. Сейчас ищут 737 программистов ...

Из xml в php

Тема в разделе "PHP для новичков", создана пользователем Nutry, 30 окт 2017.

Метки:
  1. Nutry

    Nutry Новичок

    С нами с:
    30 окт 2017
    Сообщения:
    10
    Симпатии:
    0
    Всем привет! Ситуация следующая. Необходимо написать конвертер из xml в txt и обратно из txt в xml.
    Я в php новичок, сделал следующим образом. Сразу скажу, что всё работает. НО объясню дальше.
    Пример xml
    Код (Text):
    1. <?xml version="1.0" ?>
    2. <?xml-stylesheet type="text/xsl" href="example1.xsl"?>
    3. <items>
    4. <item id="26277932">
    5. <genre>книга </genre>
    6. <type>монография</type>
    7. <language>RU</language>
    8. <yearpubl>2016</yearpubl>
    9. <cited>0</cited>
    10. <titles>
    11. <title lang="EN">
    12. CSE's White
    13. </title>
    14. <title lang="RU">
    15. Белая книга
    16. </title>
    17. </titles>
    18. <grnti>195100</grnti>
    19. <risc>yes</risc>
    20. <corerisc>no</corerisc>
    21. <titleaddinfo>Обновленная версия 2012 г.</titleaddinfo>
    22. <responsibility>
    23. Council of Science Editors, Ассоциация научных редакторов и издателей
    24. </responsibility>
    25. <placepubl>Екатеринбург</placepubl>
    26. <isbn>978-5-7996-1742-4</isbn>
    27. <pagesnumber>132</pagesnumber>
    28. <publisher>Уральский университет</publisher>
    29. <authors>
    30. <author num="1" lang="EN">
    31. <lastname>Petrov</lastname>
    32. <initials>V.N.</initials>
    33. <authorid>663665</authorid>
    34. <email>Petrov@ex.ru</email>
    35. <role>переводчик</role>
    36. <affiliations>
    37. <affiliation num="1" lang="EN">
    38. <orgname>Association of Science Editors and Publishers</orgname>
    39. <orgid>15039</orgid>
    40. <country>RUS</country>
    41. <town>Moscow</town>
    42. <address>20, Zeleniy prospectus, 111397</address>
    43. </affiliation>
    44. </affiliations>
    45. </author>
    46. <author num="1" lang="RU">
    47. <lastname>Петров</lastname>
    48. <initials>Вадим Николаевич</initials>
    49. <authorid>663665</authorid>
    50. <email>Petrov@ex.ru</email>
    51. <role>переводчик</role>
    52. <affiliations>
    53. <affiliation num="1" lang="RU">
    54. <orgname>Ассоциация научных редакторов и издателей</orgname>
    55. <orgid>15039</orgid>
    56. <country>RUS</country>
    57. <town>Москва</town>
    58. <address>111397, г. Москва, Зеленый проспект, д. 20.</address>
    59. </affiliation>
    60. </affiliations>
    61. </author>
    62. <author num="2" lang="EN">
    63. <lastname>Ivanov</lastname>
    64. <initials>N.A.</initials>
    65. <authorid>98887</authorid>
    66. <email>Ivanovna@ex.ru</email>
    67. <role>переводчик</role>
    68. <affiliations>
    69. <affiliation num="1" lang="EN">
    70. <orgname>Association of Science Editors and Publishers</orgname>
    71. <orgid>15039</orgid>
    72. <country>RUS</country>
    73. <town>Moscow</town>
    74. <address>20, Zeleniy prospectus, 111397</address>
    75. </affiliation>
    76. </affiliations>
    77. </author>
    78. <author num="2" lang="RU">
    79. <lastname>Иванов</lastname>
    80. <initials>Николай Алексеевич</initials>
    81. <authorid>98887</authorid>
    82. <email>Ivanovna@ex.ru</email>
    83. <role>переводчик</role>
    84. <affiliations>
    85. <affiliation num="1" lang="RU">
    86. <orgname>Ассоциация научных редакторов и издателей</orgname>
    87. <orgid>15039</orgid>
    88. <country>RUS</country>
    89. <town>Москва</town>
    90. <address>111397, г. Москва, Зеленый проспект, д. 20.</address>
    91. </affiliation>
    92. </affiliations>
    93. </author>
    94. </authors>
    95. <abstracts>
    96. <abstract lang="RU">
    97. Данное издание представляет собой перевод на русский язык экспертного доклада Совета научных редакторов по поддержке принципов добросовестности в журнальных научных публикациях. Основное внимание в экспертном докладе сосредоточено на функциях в сфере ответственности участников издательского процесса (редакторов, авторов, рецензентов, спонсоров и издателей), а также на выявлении недобросовестного поведения исследователей и рекомендациях по борьбе с ним для редакторов. Целью публикации экспертного доклада является открытие диалога по этике издательской деятельности, а также обеспечение условий для информированного принятия решений редакторами. Издание будет полезно редакторам, рецензентам, авторам и издателям, всем, кто вовлечен в процесс издания научных журналов. Основные пункты экспертного доклада могут быть использованы в качестве руководства для усовершенствования инструкция для авторов и при разработке редакционной политики журналов.
    98. </abstract>
    99. </abstracts>
    100. <codes>
    101. <code type="ББК">Я52я43</code>
    102. <code type="УДК">070.1(063)</code>
    103. </codes>
    104. </item>
    105. </items>
    Написал конвертер php в txt
    Код (Text):
    1. <?php
    2. header( "Content-Type: text; charset=UTF-8 \r\n" );
    3. header( "Content-disposition: attachment; filename=library.txt" );// put your file name here
    4. $url = "2016.xml"; // xml file location with file name
    5. if (file_exists($url)) {
    6.     $xml = simplexml_load_file($url);
    7.  
    8.     foreach($xml->item as $item)
    9.     {
    10.         $t_cnt = count($item->titles->title);
    11.         $a_cnt = count($item->authors->author);
    12.         $ab_cnt = count($item->abstracts->abstract);
    13.         $c_cnt = count($item->codes->code);
    14.         echo "\t\tGEN " . $item->genre . "\r\n";
    15.         echo "\t\tTYP " . $item->type . "\r\n";
    16.         echo "\t\tLAN " . $item->language . "\r\n";
    17.         echo "\t\tYEA " . $item->yearpubl . "\r\n";
    18.         echo "\t\tCIT " . $item->cited . "\r\n";
    19.         for ($i = 0; $i < $t_cnt; $i++) {
    20.             echo "\t\t\tTIT " . $item->titles->title[$i] . "\r\n";
    21.         }
    22.         echo "\t\tGRN " . $item->grnti . "\r\n";
    23.         echo "\t\tRIS " . $item->risc . "\r\n";
    24.         echo "\t\tCOR " . $item->corerisc . "\r\n";
    25.         echo "\t\tTIT " . $item->titleaddinfo . "\r\n";
    26.         echo "\t\tRES " . $item->responsibility . "\r\n";
    27.         echo "\t\tPLA " . $item->placepubl . "\r\n";
    28.         echo "\t\tISB " . $item->isbn . "\r\n";
    29.         echo "\t\tPAG " . $item->pagesnumber . "\r\n";
    30.         echo "\t\tPUB " . $item->publisher . "\r\n";
    31.         for ($i = 0; $i < $a_cnt; $i++) {
    32.             $af_cnt = count($item->authors->author[$i]->affiliations->affiliation);
    33.             echo "\t\t\tLAS " . $item->authors->author[$i]->lastname . "\r\n";
    34.             echo "\t\t\tINI " . $item->authors->author[$i]->initials . "\r\n";
    35.             echo "\t\t\tAUT " . $item->authors->author[$i]->authorid . "\r\n";
    36.             echo "\t\t\tEMA " . $item->authors->author[$i]->email . "\r\n";
    37.             echo "\t\t\tROL " . $item->authors->author[$i]->role . "\r\n";
    38.             for ($j = 0; $j < $af_cnt; $j++) {
    39.                 echo "\t\t\t\tORG " . $item->authors->author[$i]->affiliations->affiliation[$j]->orgname . "\r\n";
    40.                 echo "\t\t\t\tORG " . $item->authors->author[$i]->affiliations->affiliation[$j]->orgid . "\r\n";
    41.                 echo "\t\t\t\tCOU " . $item->authors->author[$i]->affiliations->affiliation[$j]->country . "\r\n";
    42.                 echo "\t\t\t\tTOW " . $item->authors->author[$i]->affiliations->affiliation[$j]->town . "\r\n";
    43.                 echo "\t\t\t\tADD " . $item->authors->author[$i]->affiliations->affiliation[$j]->address . "\r\n";
    44.             }
    45.         }
    46.         for ($i = 0; $i < $ab_cnt; $i++) {
    47.             echo "\t\t\ABS " . $item->abstracts->abstract[$i] . "\r\n";
    48.         }
    49.         for ($i = 0; $i < $c_cnt; $i++) {
    50.             echo "\t\t\COD " . $item->codes->code[$i] . "\r\n";
    51.         }
    52.         echo "\r\n\r\n";
    53.     }
    54. }
    55. ?>
    Итог - он работает, но только с файлами, который строго этой структуры и с такими же тегами. А нужно, чтобы конвертер работал с любым xml и конвертировал его в txt с тегами. Посоветуйте что-нибудь, пожалуйста.
     
  2. alexpride1993

    alexpride1993 Новичок

    С нами с:
    28 мар 2016
    Сообщения:
    56
    Симпатии:
    20
    Рекурсивный обход xml с формированием требуемого формата вывода, не?
     
    Nutry нравится это.
  3. Nutry

    Nutry Новичок

    С нами с:
    30 окт 2017
    Сообщения:
    10
    Симпатии:
    0
    Я новичок...не знаю, что это, как...не сталкивался с этим никогда..
     
  4. Nutry

    Nutry Новичок

    С нами с:
    30 окт 2017
    Сообщения:
    10
    Симпатии:
    0
    Сейчас почитаю, спасибо за подсказку! Могли бы показать какой-нибудь пример, если у вас есть?
     
  5. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    А каков смысл сего действа? Честно, не догоняю) Xml > zip > xml смысл есть, если нужно упаковать/распаковать. А в тхт на кой парсить и обратно? Тем более xml и есть тхт)
     
  6. Nutry

    Nutry Новичок

    С нами с:
    30 окт 2017
    Сообщения:
    10
    Симпатии:
    0
    Такое задание необходимо выполнить...не я придумал...
     
  7. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Тогда как написал @alexpride1993
    Геморное это дело, но решаемое. Для общего развития пойдёт, но передайте профессору, чтобы переходил на более лёгкие наркотики))
     
    Nutry нравится это.