0

外部 XML-API から JSON への xml を解析する必要があります。そのために、これまでのところ非常にうまく機能するIBM の非常に優れた小さなライブラリを使用しました。残念ながら、いくつかのテキスト ノードにはいくつかの単純なテキスト ノードのすぐ隣にサブノードがあり、サブの子として検出されないことがわかりました。

簡単な例:

<?php

$str = 
'<topics>
  <topic>Objekte mit Data Dictionary Views verwalten
    <sub_topics>
      <sub_topic>Data Dictionary erläutern</sub_topic>
      <sub_topic>Dictionary Views</sub_topic>
      <sub_topic>Views USER_OBJECTS und ALL_OBJECTS</sub_topic>
      <sub_topic>Tabellen- und Spalteninformationen</sub_topic>
      <sub_topic>Dictionary Views nach Constraint-Informationen abfragen</sub_topic>
      <sub_topic>Dictionary Views nach View-, Sequence-, Index- und Synonyminformationen abfragen</sub_topic>
      <sub_topic>Tabellen Kommentare hinzufügen</sub_topic>
      <sub_topic>Dictionary Views nach Kommentarinformationen abfragen</sub_topic>
    </sub_topics>
  </topic>
  <topic>Große Datensets bearbeiten
    <sub_topics>
      <sub_topic>Daten mithilfe von Unterabfragen bearbeiten</sub_topic>
      <sub_topic>Daten mit einer Unterabfrage als Quelle abrufen</sub_topic>
      <sub_topic>INSERT-Anweisungen mit einer Unterabfrage als Ziel</sub_topic>
      <sub_topic>Schlüsselwort WITH CHECK OPTION in DML-Anweisungen</sub_topic>
      <sub_topic>Anweisung INSERT für mehrere Tabellen – Varianten</sub_topic>
      <sub_topic>Anweisung INSERT für mehrere Tabellen</sub_topic>
      <sub_topic>Zeilen in einer Tabelle zusammenführen</sub_topic>
      <sub_topic>Über einen Zeitraum erfolgte Datenänderungen überwachen</sub_topic>
    </sub_topics>
  </topic>
  <topic>Daten in verschiedenen Zeitzonen verwalten
    <sub_topics>
      <sub_topic>Zeitzonen</sub_topic>
      <sub_topic>CURRENT_DATE, CURRENT_TIMESTAMP und LOCALTIMESTAMP</sub_topic>
      <sub_topic>Datum und Uhrzeit in einer Sessionzeitzone vergleichen</sub_topic>
      <sub_topic>DBTIMEZONE und SESSIONTIMEZONE</sub_topic>
      <sub_topic>DATE und TIMESTAMP – Unterschiede</sub_topic>
      <sub_topic>Datentypen INTERVAL</sub_topic>
      <sub_topic>EXTRACT, TZ_OFFSET und FROM_TZ</sub_topic>
      <sub_topic>TO_TIMESTAMP, TO_YMINTERVAL und TO_DSINTERVAL</sub_topic>
    </sub_topics>
  </topic>
</topics>';

$xml = simplexml_load_string($str, 'SimpleXMLElement', LIBXML_XINCLUDE);

print_r($xml);

?>

SimpleXMLElement Object
(
  [topic] => Array
  (
    [0] => Objekte mit Data Dictionary Views verwalten
    [1] => Größe Datensets bearbeiten
    [2] => Daten in verschiedenen Zeitzonen verwalten
  )
)

エントリのみを使用するように xml 文字列を減らすと、simplexml_load_string は子ノードを検出しますが、「見出し」は減らします。

<?php

$str = '<topic>Objekte mit Data Dictionary Views verwalten
      <sub_topics>
        <sub_topic>Data Dictionary erläutern</sub_topic>
        <sub_topic>Dictionary Views</sub_topic>
        <sub_topic>Views USER_OBJECTS und ALL_OBJECTS</sub_topic>
        <sub_topic>Tabellen- und Spalteninformationen</sub_topic>
        <sub_topic>Dictionary Views nach Constraint-Informationen abfragen</sub_topic>
        <sub_topic>Dictionary Views nach View-, Sequence-, Index- und Synonyminformationen abfragen</sub_topic>
        <sub_topic>Tabellen Kommentare hinzufügen</sub_topic>
        <sub_topic>Dictionary Views nach Kommentarinformationen abfragen</sub_topic>
      </sub_topics>
    </topic>';

$xml = simplexml_load_string($str);
print_r($xml);
?>

SimpleXMLElement Object
(
    [sub_topics] => SimpleXMLElement Object
        (
            [sub_topic] => Array
                (
                    [0] => Data Dictionary erläutern
                    [1] => Dictionary Views
                    [2] => Views USER_OBJECTS und ALL_OBJECTS
                    [3] => Tabellen- und Spalteninformationen
                    [4] => Dictionary Views nach Constraint-Informationen abfragen
                    [5] => Dictionary Views nach View-, Sequence-, Index- und Synonyminformationen abfragen
                    [6] => Tabellen Kommentare hinzufügen
                    [7] => Dictionary Views nach Kommentarinformationen abfragen
                )

        )

)

..xpathを使用して手動で疑わしい領域にクロールし、それらのサブチャイルドに配列変換を使用して、後で配列をマージする以外の解決策があるかどうか疑問に思っています。

これは、解析する必要がある完全な xml ファイルの一例です: http://education.oracle.com/pls/web_prod-plq-dad/catalogs.xml_desc?p_id=D49988DE20&p_org_id=34&p_lang=D

前もって感謝します

編集: この問題を解決するために、より複雑な方法で配列を出力し、子要素、属性、およびノー​​ド値から分離できる別のライブラリを使用しました: http://www.criticaldevelopment.net/xml/doc.php

4

1 に答える 1

0

AJAX リクエストを実行してこのデータにアクセスできる場合は、json と同じように XML を解析できる jQuery.post() または jQuery.get() 関数を使用することをお勧めします。

これはjavascriptですが、コーディングや検索に何時間も費やすことなく治療を行う最も簡単な方法であることは間違いありません.

于 2012-06-12T15:23:45.900 に答える