Преобразование XML в JSON в PHP с помощью встроенных элементов HTML - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь преобразовать XML в JSON в PHP, используя simplexml, но преобразование не включает встроенный HTML. Я не уверен в правильной терминологии для встроенного HTML (встроенного?), Но ниже приведены некоторые примеры того, что я делаю и что я ищу:

Выдержка из XML, который я пытаюсь преобразовать:

<uscDoc xsi:schemaLocation="http://xml.house.gov/schemas/uslm/1.0 USLM-1.0.15.xsd" xml:lang="en" identifier="/us/usc/t1" xmlns="http://xml.house.gov/schemas/uslm/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/">
    <meta>
      <dc:title>Title 1</dc:title>
      <dc:type>USCTitle</dc:type>
      <docNumber>1</docNumber>
      <docPublicationName>Online@116-17</docPublicationName>
      <dc:publisher>OLRC</dc:publisher>
      <dcterms:created>2019-04-04T07:37:52</dcterms:created>
      <dc:creator>USCConverter 1.1</dc:creator>
    </meta>
    <main>
    <title id="id14e8bf81-56ce-11e9-9468-8af4f27dcc3b" identifier="/us/usc/t1"><num value="1">Title 1—</num><heading>GENERAL PROVISIONS</heading>
    <note topic="enacting" id="id14e90da2-56ce-11e9-9468-8af4f27dcc3b"><p>This title was enacted by <ref href="/us/act/1947-07-30/ch388">act July 30, 1947, ch. 388</ref>, § 1, <ref href="/us/stat/61/633">61 Stat. 633</ref></p></note>
    <note topic="miscellaneous" id="id14e95bc3-56ce-11e9-9468-8af4f27dcc3b"><p>Current through 116-17</p></note>

Когда я преобразовываю это в JSON (или в массив) в PHP, это приводит к следующему:

Array
(
    [@attributes] => Array
        (
            [identifier] => /us/usc/t1
        )

    [meta] => Array
        (
            [docNumber] => 1
            [docPublicationName] => Online@116-17
        )

    [main] => Array
        (
            [title] => Array
                (
                    [@attributes] => Array
                        (
                            [id] => id14e8bf81-56ce-11e9-9468-8af4f27dcc3b
                            [identifier] => /us/usc/t1
                        )

                    [num] => Title 1—
                    [heading] => GENERAL PROVISIONS
                    [note] => Array
                        (
                            [0] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [topic] => enacting
                                            [id] => id14e90da2-56ce-11e9-9468-8af4f27dcc3b
                                        )

                                    [p] => This title was enacted by , § 1,
                                )

                            [1] => Array
                                (
                                    [@attributes] => Array
                                        (
                                            [topic] => miscellaneous
                                            [id] => id14e95bc3-56ce-11e9-9468-8af4f27dcc3b
                                        )

                                    [p] => Current through 116-17
                                )

                        )

Часть, которая является неправильной (среди других пропущенных данных), является разделом, который включает следующее: «Этот заголовок был принят, §1,»

Когда я конвертирую этот XML с помощью онлайн-конвертера JavaScript в JSON (http://www.utilities -online.info / xmltojson / ), он конвертируется правильно:

{
  "uscDoc": {
    "-xsi:schemaLocation": "http://xml.house.gov/schemas/uslm/1.0 USLM-1.0.15.xsd",
    "-xml:lang": "en",
    "-identifier": "/us/usc/t1",
    "-xmlns": "http://xml.house.gov/schemas/uslm/1.0",
    "-xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
    "-xmlns:dc": "http://purl.org/dc/elements/1.1/",
    "-xmlns:dcterms": "http://purl.org/dc/terms/",
    "meta": {
      "dc:title": "Title 1",
      "dc:type": "USCTitle",
      "docNumber": "1",
      "docPublicationName": "Online@116-17",
      "dc:publisher": "OLRC",
      "dcterms:created": "2019-04-04T07:37:52",
      "dc:creator": "USCConverter 1.1"
    },
    "main": {
      "title": {
        "-id": "id14e8bf81-56ce-11e9-9468-8af4f27dcc3b",
        "-identifier": "/us/usc/t1",
        "num": {
          "-value": "1",
          "#text": "Title 1—"
        },
        "heading": "GENERAL PROVISIONS",
        "note": [
          {
            "-topic": "enacting",
            "-id": "id14e90da2-56ce-11e9-9468-8af4f27dcc3b",
            "p": {
              "#text": [
                "This title was enacted by ",
                ", § 1, "
              ],
              "ref": [
                {
                  "-href": "/us/act/1947-07-30/ch388",
                  "#text": "act July 30, 1947, ch. 388"
                },
                {
                  "-href": "/us/stat/61/633",
                  "#text": "61 Stat. 633"
                }
              ]
            }
          },

Как видите, строка «этот заголовок был введен в действие» правильно разбита, поэтому ее можно перемежать с данными ниже, в том числе «акт 30 июля 1947 г., гл. 388» и «61 Stat. 633» . "

Я перепробовал все варианты, которые я могу найти в simplexml, чтобы он анализировал XML так, как это делает онлайн-анализатор XML в JSON, но я не могу заставить его работать. Я пробовал множество других фрагментов кода PHP, которые нашел здесь и в других местах, но не могу получить тот же результат.

Любая помощь будет оценена.

...