CDATA节的childNodes在加载XML文件不可见

问题描述 投票:0回答:1

我使用的SimpleXML加载外部XML文件到PHP。 XML包含CDATA部分,而我需要的内容。然而,这些CDATA部分具有的childNodes随后也有CDATA部分。我还需要加载的。 XML是一个给定的事实,它从外部源的,最好我不应该对其进行修改。

我加载像这样的XML:

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

根据需要,这给了我最高的CDATA节的内容。但是,这些部分的的childNodes都将丢失。

禁用LIBXML_NOCDATA标志,我可以访问那些的childNodes而不是这里面他们CDATA。

XML是> 25万​​线,这是一款,是有关这个问题的摘录:

<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

无德LIBXML_NOCDATA标志:

"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
php xml simplexml
1个回答
0
投票

在CDATA和子节点,实际上并没有从对象失踪。他们只是从什么它试图拉平这些对象,如缺少:

  • 通用调试输出像print_rvar_dump
  • 转化成阵列,或JSON
  • 现场调试器可能不会有很大的帮助或者,因为它们不能显示动态属性和方法

(注意,相反的是“@属性”属性的真 - 它不平整的物体时,除了存在;你真正访问使用$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;
© www.soinside.com 2019 - 2024. All rights reserved.