【发布时间】:2019-02-07 11:11:23
【问题描述】:
我正在使用 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
【问题讨论】:
-
您能否显示您尝试访问但无法访问的数据。
-
当然,我已经在 xml 源代码中通过在数据周围添加水平线来标记数据。
-
只用
$xml = simplexml_load_file($path);试试foreach ( $xml->werkprocesgedrag->werkprocesgedragperprofiel->aanvullend as $content ) { echo $content->omschrijving.PHP_EOL;} -
对于未来这样的问题,请尝试创建一个minimal reproducible example - 我们不需要查看您正在使用的实际 XML,只需 一个小的演示相同问题的示例。我试图在我的答案中创建一个,但如果你想出一个会更容易。