SimpleXML: как заменить имя узла? - PullRequest
1 голос
/ 11 ноября 2010

Я пытаюсь вывести XML-файл в виде HTML.Кажется, что SimpleXML обрабатывает мои файлы быстрее, чем XSL (файлы по 2-3 МБ каждый).Итак, я закончил с SimpleXML.Все выглядит нормально, файлы загружены нормально с $data = simplexml_load_string($file), но теперь мне нужно заменить имена узлов на имена тегов html и создать новый документ с $data->asXML().Есть ли способ сделать это?

Что у меня сейчас есть:

    <body>
 <section>
  <title>
   <p>sometext</p>
  </title>
  <epigraph>
    <p>sometext</p>
  </epigraph>
  <stanza>
    <v>sometext</v>
    <v>sometext</v>
    <v>sometext</v>
    <v>sometext</v>
  </stanza>
  <stanza>
    <v>sometext</v>
    <v>sometext</v>
    <v>sometext</v>
    <v>sometext</v>
  </stanza>
   <section>
    <title>
     <p>sometext</p>
    </title>
    <epigraph>
      <p>sometext</p>
    </epigraph>
    <stanza>
      <v>sometext</v>
      <v>sometext</v>
      <v>sometext</v>
      <v>sometext</v>
    </stanza>
    <stanza>
      <v>sometext</v>
      <v>sometext</v>
      <v>sometext</v>
      <v>sometext</v>
    </stanza>
   </section>
 </section>
</body>

И я бы хотел это:

   <body>
 <div class="section">
  <h2>
   <span>sometext</span>
  </h2>
  <div class="epigraph">
    <p>sometext</p>
  </div>
  <ul>
    <li>sometext</li>
    <li>sometext</li>
    <li>sometext</li>
    <li>sometext</li>
  </ul>
  <ul>
    <li>sometext</li>
    <li>sometext</li>
    <li>sometext</li>
    <li>sometext</li>
  </ul>
   <div class="section">
    <h2>
     <span>sometext</span>
    </h2>
    <div class="epigraph">
      <p>sometext</p>
    </div>
    <ul>
      <li>sometext</li>
      <li>sometext</li>
      <li>sometext</li>
      <li>sometext</li>
    </ul>
    <ul>
      <li>sometext</li>
      <li>sometext</li>
      <li>sometext</li>
      <li>sometext</li>
    </ul>
   </div>
 </div>
</body>

заранее спасибо

1 Ответ

0 голосов
/ 11 ноября 2010

AFAIK, вы не можете сделать это напрямую. Вы можете либо

  • Разобрать его и перебрать, используя foreach и такие,
  • Или, если XML гарантированно будет таким простым и последовательным, вы можете просто сделать что-то вроде
    strtr($xml, array('stanza>' => 'ul>', 'v>' => 'li>', ...));
...