Дочерние узлы раздела CDATA не видны в загруженном XML-файле - PullRequest
0 голосов
/ 07 февраля 2019

Я загружаю внешний файл xml в php, используя simplexml.XML содержит разделы CDATA, содержание которых мне нужно.Однако эти разделы CDATA имеют дочерние узлы, которые впоследствии также имеют разделы CDATA.Мне также нужно загрузить их.Xml - это конкретный факт, он из внешнего источника, и, предпочтительно, мне не нужно его изменять.

Я загружаю XML следующим образом:

$xml = simplexml_load_file($path, "SimpleXMLElement", LIBXML_NOCDATA);

Это дает мнесодержание самых высоких разделов CDATA по мере необходимости.Но дочерние узлы этих разделов потеряны.

Отключение флага LIBXML_NOCDATA дает мне доступ к этим дочерним узлам, но не к CDATA, который находится внутри них.

xml составляет> 250000 строк, этовыдержка из раздела, который имеет отношение к проблеме:

<werkproces nr="1216607" nrvoorganger="965370" soortwijziging="Identiek" titel="Ondersteunt de cliënt bij de persoonlijke verzorging" hoofdstuk="B1-K1-W2">
  <werkprocesomschrijving><![CDATA[De beroepskracht maatschappelijke zorg ondersteunt de cliënt bij het realiseren van doelen ten aanzien van de persoonlijke lichamelijke verzorging, toiletgang, mobiliteit en het slaap/waakritme. Ze zorgt er voor dat de cliënt zo veel mogelijk zelf de regie kan voeren en naastbetrokkenen zo veel mogelijk zelf kunnen doen en vult waar nodig aan. Ze sluit hierbij aan bij de eigen kracht, mogelijkheden en beleving van de cliënt en naastbetrokkenen. Ze ondersteunt het optimaal lichamelijk en geestelijk welbevinden van de cliënt door gebruik te maken van aangepaste materialen en ruimten. Ze werkt aan het onderling vertrouwen en biedt de cliënt de mogelijkheid om persoonlijke en/of intieme vraagstukken te bespreken. Ze toont voorbeeldgedrag en biedt de cliënt mogelijkheden om vaardigheden te leren. Ze is er alert op dat gedrag veroorzaakt kan worden door fysieke problemen of ongemakken. Zij observeert en signaleert veranderingen in gedrag en gezondheid, beredeneert vervolgens welke volgende stappen genomen moeten worden en onderneemt de benodigde stappen. Ze rapporteert bijzonderheden.]]>


----------


    <werkprocesomschrijvingperprofiel><aanvullend><profiel referentie="1216566" /><omschrijving><![CDATA[De persoonlijk begeleider gehandicaptenzorg schakelt zo nodig andere disciplines in.]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216577" /><omschrijving><![CDATA[De agogisch medewerker GGZ schakelt zo nodig andere disciplines in.]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216586" /><omschrijving><![CDATA[De thuisbegeleider schakelt zo nodig andere disciplines in.]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216596" /><omschrijving><![CDATA[De persoonlijk begeleider specifieke doelgroepen schakelt zo nodig andere disciplines in.]]></omschrijving></aanvullend></werkprocesomschrijvingperprofiel>


----------


  </werkprocesomschrijving>
  <werkprocesresultaat><![CDATA[De cliënt en naastbetrokkenen zijn respectvol benaderd en hebben passende ondersteuning ontvangen bij de persoonlijke verzorging.]]><werkprocesresultaatperprofiel><aanvullend><profiel referentie="1216566" /><omschrijving><![CDATA[]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216577" /><omschrijving><![CDATA[]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216586" /><omschrijving><![CDATA[]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216596" /><omschrijving><![CDATA[]]></omschrijving></aanvullend></werkprocesresultaatperprofiel></werkprocesresultaat>
  <werkprocesgedrag><![CDATA[De beroepskracht maatschappelijke zorg:
- creëert adequaat mogelijkheden voor de cliënt om zich op het gebied van persoonlijke verzorging te ontwikkelen en doelen te bereiken;
- toont begrip voor de mening en gevoelens van de cliënt ten aanzien van zijn uiterlijk en persoonlijke hygiëne;
- gaat tijdens de persoonlijke verzorging discreet om met de privacy van de cliënt;
- voert de benodigde handelingen snel en accuraat uit volgens ergonomische voorschriften.
]]><werkprocesgedragperprofiel><aanvullend><profiel referentie="1216566" /><omschrijving><![CDATA[De persoonlijk begeleider gehandicaptenzorg:
- daagt, indien mogelijk, de cliënt uit om zelf met oplossingen te komen of (gedrags)alternatieven uit te proberen;
- motiveert naastbetrokkenen doelbewust tot haalbare activiteiten. ]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216577" /><omschrijving><![CDATA[De agogisch medewerker GGZ:
- daagt, indien mogelijk, de cliënt uit om zelf met oplossingen te komen of (gedrags)alternatieven uit te proberen;
- motiveert naastbetrokkenen doelbewust tot haalbare activiteiten. ]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216586" /><omschrijving><![CDATA[De thuisbegeleider:
- daagt, indien mogelijk, de cliënt uit om zelf met oplossingen te komen of (gedrags)alternatieven uit te proberen;
- motiveert naastbetrokkenen doelbewust tot haalbare activiteiten. ]]></omschrijving></aanvullend><aanvullend><profiel referentie="1216596" /><omschrijving><![CDATA[De persoonlijk begeleider specifieke doelgroepen:
- daagt, indien mogelijk, de cliënt uit om zelf met oplossingen te komen of (gedrags)alternatieven uit te proberen;
- motiveert naastbetrokkenen doelbewust tot haalbare activiteiten. ]]></omschrijving></aanvullend></werkprocesgedragperprofiel></werkprocesgedrag>
  <werkprocescompetenties>
    <competentie referentie="3086" />
    <competentie referentie="3087" />
    <competentie referentie="3089" />
    <competentie referentie="3094" />
    <werkprocescompetentiesperprofiel>
      <aanvullend>
        <profiel referentie="1216566" />
        <omschrijving>
          <competentie referentie="3086" />
        </omschrijving>
      </aanvullend>
      <aanvullend>
        <profiel referentie="1216577" />
        <omschrijving>
          <competentie referentie="3086" />
        </omschrijving>
      </aanvullend>
      <aanvullend>
        <profiel referentie="1216586" />
        <omschrijving>
          <competentie referentie="3086" />
        </omschrijving>
      </aanvullend>
      <aanvullend>
        <profiel referentie="1216596" />
        <omschrijving>
          <competentie referentie="3086" />
        </omschrijving>
      </aanvullend>
    </werkprocescompetentiesperprofiel>
  </werkprocescompetenties>
</werkproces>

Я предполагаю, что это ожидаемое поведение от Simplexml, я ищу способ доступа к этим базовым разделам CDATA.Мои текущие результаты:

С флагом LIBXML_CDATA:

"werkproces" => array:7
          0 => array:5
          1 => array:5
            "@attributs" => array:5
              "nr" => "1216607"
              "nrvoorganger" => "965370"
              "soortwijziging" => "Identiek"
              "titel" => "Ondersteunt de cliënt bij de persoonlijke verzorging"
              "hoofdstuk" => "B1-K1-W2"
            ]
            "werkprocesomschrijving" => "De beroepskracht maatschappelijke zorg ondersteunt de cliënt bij het realiseren van doelen ten aanzien van de persoonlijke lichamelijke verzorging, toiletgang, mobiliteit en het slaap/waakritme. Ze zorgt er voor dat de cliënt zo veel mogelijk zelf de regie kan voeren en naastbetrokkenen zo veel mogelijk zelf kunnen doen en vult waar nodig aan. Ze sluit hierbij aan bij de eigen kracht, mogelijkheden en beleving van de cliënt en naastbetrokkenen. Ze ondersteunt het optimaal lichamelijk en geestelijk welbevinden van de cliënt door gebruik te maken van aangepaste materialen en ruimten. Ze werkt aan het onderling vertrouwen en biedt de cliënt de mogelijkheid om persoonlijke en/of intieme vraagstukken te bespreken. Ze toont voorbeeldgedrag en biedt de cliënt mogelijkheden om vaardigheden te leren. Ze is er alert op dat gedrag veroorzaakt kan worden door fysieke problemen of ongemakken. Zij observeert en signaleert veranderingen in gedrag en gezondheid, beredeneert vervolgens welke volgende stappen genomen moeten worden en onderneemt de benodigde stappen. Ze rapporteert bijzonderheden."
            "werkprocesresultaat" => "De cliënt en naastbetrokkenen zijn respectvol benaderd en hebben passende ondersteuning ontvangen bij de persoonlijke verzorging."
            "werkprocesgedrag" => """
              De beroepskracht maatschappelijke zorg:\n
              - creëert adequaat mogelijkheden voor de cliënt om zich op het gebied van persoonlijke verzorging te ontwikkelen en doelen te bereiken;\n
              - toont begrip voor de mening en gevoelens van de cliënt ten aanzien van zijn uiterlijk en persoonlijke hygiëne;\n
              - gaat tijdens de persoonlijke verzorging discreet om met de privacy van de cliënt;\n
              - voert de benodigde handelingen snel en accuraat uit volgens ergonomische voorschriften.\n
              """
            "werkprocescompetenties" => array:2

Без флага de LIBXML_CDATA:

"werkproces" => array:7
          0 => array:5
          1 => array:5
            "@attributes" => array:5
              "nr" => "1216607"
              "nrvoorganger" => "965370"
              "soortwijziging" => "Identiek"
              "titel" => "Ondersteunt de cliënt bij de persoonlijke verzorging"
              "hoofdstuk" => "B1-K1-W2"
            ]
            "werkprocesomschrijving" => array:1
            "werkprocesresultaat" => array:1
            "werkprocesgedrag" => array:1
              "werkprocesgedragperprofiel" => array:1
                "aanvullend" => array:4
                  0 => array:2
                    "profiel" => array:1
                      "@attributes" => array:1
                        "referentie" => "1216566"
                      ]
                    ]
                    "omschrijving" => []
                  ]
                  1 => array:2
                    "profiel" => array:1
                      "@attributes" => array:1
                        "referentie" => "1216577"
                      ]
                    ]
                    "omschrijving" => []
                  ]
                  2 => array:2
                    "profiel" => array:1
                      "@attributes" => array:1
                        "referentie" => "1216586"
                      ]
                    ]
                    "omschrijving" => []
                  ]
                  3 => array:2
                    "profiel" => array:1
                      "@attributes" => array:1
                        "referentie" => "1216596"
                      ]
                    ]
                    "omschrijving" => []
                  ]
                ]
              ]
            ]
            "werkprocescompetenties" => array:2
          ]
          2 => array:5
          3 => array:5
          4 => array:5
          5 => array:5
          6 => array:5

1 Ответ

0 голосов
/ 07 февраля 2019

CDATA и дочерние узлы на самом деле не отсутствуют в объектах.Они просто отсутствуют во всем, что пытается сгладить эти объекты, например:

  • общий отладочный вывод, например print_r, var_dump и т. Д.
  • преобразование в массив илиJSON
  • живые отладчики, вероятно, также не будут очень полезны, так как они не могут отображать динамические свойства и методы

(Обратите внимание, что в случае @attributes верно и обратное)свойство - оно не существует за исключением при выравнивании объекта; вы фактически получаете доступ к атрибутам, используя $someElement['someAttribute'] или $someElement->attributes()->someAttribute.)

Если вы просто пытаетесь получить доступ к ожидаемым элементамчтобы существовать, основываясь на просмотре самого XML, он будет работать нормально, не передавая никаких дополнительных опций simplexml_load_file / simplexml_load_string:

$xml = '
<sample>
    <parent>
        <![CDATA[Some text in a CDATA wrapper]]>
        <child>A child node with its own content</child>
    </parent>
</sample>
';

$sx = simplexml_load_string($xml);

echo (string)$sx->parent, PHP_EOL;
echo (string)$sx->parent->child, PHP_EOL;
...