CDATA部分的子节点在已加载的xml文件中不可见

时间:2019-02-07 11:11:24

标签: php xml simplexml

我正在使用simplexml将外部xml文件加载到php中。 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 :(得分:0)

对象实际上并没有缺少CDATA和子节点。他们只是缺少任何试图使这些对象扁平化的东西,例如:

  • 通用调试输出,例如print_rvar_dump
  • 转换为数组或JSON
  • 实时调试器可能也不会很有用,因为它们无法显示动态属性和方法

(请注意,“ @ attributes”属性的情况恰恰相反-展平对象时,该属性不存在 except ;您实际上是使用$someElement['someAttribute']或{{1 }}。

如果您只是基于查看XML本身来尝试访问期望存在的元素,那么它将可以正常工作而无需将任何其他选项传递给$someElement->attributes()->someAttribute / simplexml_load_file

simplexml_load_string