Основной simpleXML рабочий пример?

Похоже, что существует много проблем с simpleXML в PHP. Я выполняю последнюю версию php в Windows, и я просто не могу заставить основные примеры simpleXML работать в документации.

Мой XML-файл:

<?xml version="1.0" encoding="ISO-8859-1"?>
<programme> 
  <title>Billy Bushwaka</title> 
  <episodeNumber>2</episodeNumber> 
  <description>Billy Bushwaka entertains</description> 
  <url>play.swf</url> 
</programme> 

Моя программа PHP:

<?php
$xml = simplexml_load_file("local.xml");

$result = $xml->xpath("//programme");
echo "Title: " . $result . "</br>";
?>

Все, что я получаю, следующее:

Заголовок: массив

Как может я получать "Заголовок: Billy Bushwaka"?

Нет никаких повторений данных XML, таким образом, я не хочу использовать массивы.

5
задан Bill the Lizard 19 June 2011 в 13:52
поделиться

4 ответа

SimpleXML 101

  1. Прежде всего, всегда называйте переменные PHP после узла, который они представляют.

     // корневой узел - это 
    $ program = simplexml_load_file ("local.xml");
    
  2. Доступ к дочерним элементам (узлам), как если бы они были свойствами объекта.

     echo $ programme-> title;
    
  3. Если есть несколько дочерних элементов, использующих одно и то же имя, вы можете указать их позицию с отсчетом от 0

     // first  child
    echo $ programme-> title [0];
    
    // создаем или изменяем значение второго дочернего элемента <title />
    $ programme-> title [1] = 'Второй заголовок';
    </code></pre></li>
    <li><p> Доступ к атрибутам, как если бы они были ключами массива </p>
    
    <pre><code> // <mynode attr = "attribute value" />
    эхо $ mynode ['attr'];
    </code></pre></li>
    <li><p> XPath всегда возвращает массив. </p></li>
    </ol>
    
    <hr />
    
    <p> Возвращаясь к вашему случаю, лучший способ получить доступ к этому узлу <code> <title /> </code> - это </p>
    
    <pre><code>$programme = simplexml_load_file("local.xml");
    echo "Title: " . $programme->title;
    </code></pre>                  </div>
                      <div class="votes-answer green">
                         
                         <div class="vote-count" itemprop="upvoteCount">20</div><i class="fa fa-thumbs-o-up"></i>
                      </div>
                      <div class="clearfix"></div>
                      <div class="action-time">
                         ответ дан                      <span title="18 December 2019 в 06:22 ">18 December 2019 в 06:22 </span>
                      </div>
                      <a class="s-link" href="/questions/234538/osnovnoj-simplexml-rabochij-primer#584" title="поделиться">поделиться</a>
                   </div>
                                  <div class="post-layout--right">
                      <div id="comments-669261">
                         <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true">
          
                                             </ul>
                      </div>
                   </div>
                </div>
             </div>
             
                
             <div class="answer" id="669262" itemscope="" itemtype="http://schema.org/Answer">
                <div class="answer-row">
                   <div class="answer-text">
                      <div class="description" itemprop="text">
                         <p> Вероятно, вам следует изменить xpath на <code> // program / title </code>, а затем echo <code> $ result [0] </code> или оставить xpath как это и echo <code> $ result [0] -> title </code>. Помните, что <a href="http://php.net/var_dump" rel="nofollow noreferrer"> var_dump </a> всегда поможет вам. </p>                  </div>
                      <div class="votes-answer green">
                         
                         <div class="vote-count" itemprop="upvoteCount">1</div><i class="fa fa-thumbs-o-up"></i>
                      </div>
                      <div class="clearfix"></div>
                      <div class="action-time">
                         ответ дан                      <span title="18 December 2019 в 06:22 ">18 December 2019 в 06:22 </span>
                      </div>
                      <a class="s-link" href="/questions/234538/osnovnoj-simplexml-rabochij-primer#584" title="поделиться">поделиться</a>
                   </div>
                                  <div class="post-layout--right">
                      <div id="comments-669262">
                         <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true">
          
                                             </ul>
                      </div>
                   </div>
                </div>
             </div>
             
                
             <div class="answer" id="669263" itemscope="" itemtype="http://schema.org/Answer">
                <div class="answer-row">
                   <div class="answer-text">
                      <div class="description" itemprop="text">
                         <p> Прежде всего, метод <a href="http://www.php.net/manual/en/simplexmlelement.xpath.php" rel="nofollow noreferrer"> simplexml xpath </a> всегда возвращает массив совпадений. Даже если есть только 1 совпадение (или даже 0, и в этом случае результат - пустой массив). Вот почему на выходе вы получаете "Array". </p>
    
    <p> Во-вторых, если вам нужен только заголовок, вам нужно изменить свой запрос xpath: </p>
    
    <pre><code>$result = $xml->xpath("//programme/title");
    echo "Title: " . $result[0] . "</br>";
    </code></pre>                  </div>
                      <div class="votes-answer green">
                         
                         <div class="vote-count" itemprop="upvoteCount">4</div><i class="fa fa-thumbs-o-up"></i>
                      </div>
                      <div class="clearfix"></div>
                      <div class="action-time">
                         ответ дан                      <span title="18 December 2019 в 06:22 ">18 December 2019 в 06:22 </span>
                      </div>
                      <a class="s-link" href="/questions/234538/osnovnoj-simplexml-rabochij-primer#584" title="поделиться">поделиться</a>
                   </div>
                                  <div class="post-layout--right">
                      <div id="comments-669263">
                         <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true">
          
                                             </ul>
                      </div>
                   </div>
                </div>
             </div>
             
                
             <div class="answer" id="669264" itemscope="" itemtype="http://schema.org/Answer">
                <div class="answer-row">
                   <div class="answer-text">
                      <div class="description" itemprop="text">
                         <p> Я думаю, вы хотите: </p>
    
    <pre><code>$result = $xml->xpath("/programme/title");
    echo "Title: " . $result[0] . "</br>";
    </code></pre>                  </div>
                      <div class="votes-answer">
                         
                         <div class="vote-count" itemprop="upvoteCount">0</div><i class="fa fa-thumbs-o-up"></i>
                      </div>
                      <div class="clearfix"></div>
                      <div class="action-time">
                         ответ дан                      <span title="18 December 2019 в 06:22 ">18 December 2019 в 06:22 </span>
                      </div>
                      <a class="s-link" href="/questions/234538/osnovnoj-simplexml-rabochij-primer#584" title="поделиться">поделиться</a>
                   </div>
                                  <div class="post-layout--right">
                      <div id="comments-669264">
                         <ul class="comments-list js-comments-list" data-remaining-comments-count="0" data-canpost="false" data-cansee="true" data-comments-unavailable="false" data-addlink-disabled="true">
          
                                             </ul>
                      </div>
                   </div>
                </div>
             </div>
             
                   <div style="margin-top: 20px;">
              Другие вопросы по тегам:          <div class="tags" style="display: inline-block; float: none;">
             <a href="/questions/tagged/php" class="tag"  title="php" rel="tag">php</a> <a href="/questions/tagged/xml" class="tag"  title="xml" rel="tag">xml</a> <a href="/questions/tagged/xpath" class="tag"  title="xpath" rel="tag">xpath</a> <a href="/questions/tagged/simplexml" class="tag"  title="simplexml" rel="tag">simplexml</a>       </div>
            <h3 class="m-t-20">Похожие вопросы:</h3>
    
            <div class="related-block">
              <ul>
                              <li><div class='votes-answer green'><span class='vote-count'>78</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/131613/skrytye-funkcii-php-zakrytyj" title="Скрытые функции PHP? [закрытый]">Скрытые функции PHP? [закрытый]</a> - 16 November 2012 17:08 </li>
                                <li><div class='votes-answer green'><span class='vote-count'>43</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/172039/luchshij-redaktor-php-dlja-zakrytogo-vista" title="Лучший редактор PHP для [закрытого] Vista">Лучший редактор PHP для [закрытого] Vista</a> - 15 September 2008 22:49 </li>
                                <li><div class='votes-answer green'><span class='vote-count'>39</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/131674/dejstvitelno-li-xslt-stoit-togo-zakrytyj" title="Действительно ли XSLT стоит того? [закрытый]">Действительно ли XSLT стоит того? [закрытый]</a> - 14 March 2011 17:13 </li>
                                <li><div class='votes-answer green'><span class='vote-count'>31</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/13430/kak-rasschitat-chislo-yanvar-mesyacz-mezhdu-dvumya-datami-s-ispol-zovaniem-php-duplicate" title="как рассчитать число Январь месяц между двумя датами с использованием php [duplicate] ">как рассчитать число Январь месяц между двумя датами с использованием php [duplicate] </a> - 22 March 2017 17:23 </li>
                                <li><div class='votes-answer green'><span class='vote-count'>30</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/28171/chitat-i-otobrazhat-danny-e-iz-bazy-danny-x-v-fajl-excel-dublikat" title="читать и отображать данные из базы данных в файл excel [дубликат] ">читать и отображать данные из базы данных в файл excel [дубликат] </a> - 12 March 2018 02:52 </li>
                                <li><div class='votes-answer green'><span class='vote-count'>30</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/11396/sozdat-z-ql-zapros-kotory-j-poluchil-stroku-mezhdu-2-x-raz-iz-2-x-dublikatov" title="создать sql-запрос, который получил строку между 2-х раз из 2-х [дубликатов] ">создать sql-запрос, который получил строку между 2-х раз из 2-х [дубликатов] </a> - 29 January 2015 03:07 </li>
                                <li><div class='votes-answer green'><span class='vote-count'>30</span> <i class="fa fa-thumbs-o-up"></i></div> <a href="/questions/24613/kak-zagruzit-pre-tegi-iz-php-html-v-vide-tekstovogo-fajla-dublikat" title="Как загрузить PRE-теги из PHP / HTML в виде текстового файла?  [Дубликат] ">Как загрузить PRE-теги из PHP / HTML в виде текстового файла?  [Дубликат] </a> - 25 May 2015 03:54 </li>
                              </ul>
            </div>
    
          </div>
       </div>
       
    </div>      </div>
          <aside class="sidebar">
            <div class="awrap">
    
    <script async src="https://yastatic.net/pcode-native/loaders/loader.js"></script>
    <script>
        (yaads = window.yaads || []).push({
            id: "553274-2",
            render: "#id-553274-2"
        });
    </script>
    <div id="id-553274-2"></div>
              <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <ins class="adsbygoogle"
         style="display:inline-block;width:300px;height:600px"
         data-ad-client="ca-pub-2355906945027976"
         data-ad-slot="8038370725"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>
    
    
            </div>
          </aside>
    
        </div>
      </div>
      <footer class="footer">
        <div class="wrapper wrapper--sm">
          <div class="footer-navs-col">
            <div class="footer-nav footer-nav--menu">
    
              <div class="footer-coryright">© 2017 - 2020 Вопросы и ответы по программированию</div>
            </div>
            <div class="footer-nav footer-nav--catalog">
            </div>
          </div>
          <div class="footer-contacts-col">
            <div class="soc-widget-col">
            </div>
          </div>
          <div class="clearfix"></div>
        </div>
    
      </footer>
    
    </div>
    
    <script type="text/javascript" src="/js/ui/jquery-ui-1.8.16.custom.min.js"></script>
    <script type="text/javascript" src="/js/ui/external/jquery.cookie.js"></script>
    
    <script type="text/javascript" src="/js/versions/menu.ru.u1607887878.js"></script>
    
    
    <script type="text/javascript" src="/js/jquery.fancybox.min.js"></script>
    <script type="text/javascript" src="/js/slick.min.js"></script>
    <script type="text/javascript" src="/js/jquery.maskedinput.min.js"></script>
    
    <script type="text/javascript" src="/js/versions/scripts.ru.u1607887878.js"></script>
    
    
    <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; var z = null;m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(90030325, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/90030325" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter -->
    
    
    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-123993370-1"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
    
      gtag('config', 'UA-123993370-1');
    </script>
    
    </div>
    <script type="application/ld+json">
      {
      "@context": "https://schema.org",
      "@type": "WebSite",
      "name": "Программирование - вопросы и ответы",
      "alternateName": "Программирование - вопросы и ответы",
      "url": "https://legkovopros.ru",
      "potentialAction": {
         "@type": "SearchAction",
         "target": "https://legkovopros.ru/search?search={search_term_string}",
         "query-input": "required name=search_term_string"
       }
    }
    {
      "@context": "https://schema.org",
      "@type": "Organization",
      "name": "Программирование - вопросы и ответы",
      "url": "https://legkovopros.ru",
      "logo": "https://legkovopros.ru/i/logo.png",
      "email": "info@legkovopros.ru",
       "telephone": ""
    
    }
    
    
    
    
    </script>
    </body>
    </html>