PHP SimpleXML поиск для детей определенного узла - PullRequest
0 голосов
/ 31 октября 2019

У меня есть XML-файл, который выглядит следующим образом

<cfdi:Receipt Total="600.00" Currency="USD" SubTotal="500" Date="2019-10-31T09:03:10">
    <cfdi:Company Name="TEST"/>
    <cfdi:Client Name="JOHN SMITH"/>
    <cfdi:Concepts>
        <cfdi:Concept Amount="517" Description="Transbond XT" Quantity="2" Unit="Piece">
            <cfdi:Taxes>
                <cfdi:Transferred>
                    <cfdi:Transfer Amount="50" Rate="0.10" Id="002" Base="500"/>
                    <cfdi:Transfer Amount="25" Rate="0.5" Id="001" Base="500"/>
                </cfdi:Transferred>
            </cfdi:Taxes>
        </cfdi:Concept>
        <cfdi:Concept Amount="517" Description="UltraEZ" Quantity="1" Unit="Piece">
            <cfdi:Taxes>
                <cfdi:Transferred>
                    <cfdi:Transfer Amount="30" Rate="0.10" Id="002" Base="300"/>
                </cfdi:Transferred>
                <cfdi:Retained>
                    <cfdi:Retain Amount="15" Rate="0.5" Id="001" Base="300"/>
                </cfdi:Transferred>
            </cfdi:Taxes>
        </cfdi:Concept>
    </cfdi:Concepts>
</cfdi:Receipt>

Я знаю, как получить доступ к определенным узлам с помощью xpath.

Например, я получаю доступ ко всем узлам концепции следующим образом:

$count = 0;

foreach ($xml -> xpath('//cfdi:Receipt//cfdi:Concepts//cfdi:Concept') as $node) {
    $concepts[$count]['amount'] = $node['Amount'];
    $concepts[$count]['rate'] = $node['Rate'];
    $concepts[$count]['id'] = $node['Id'];
    $concepts[$count]['base'] = $node['Base'];

    $count++;
}

И я могу сделать то же самое для переноса и сохранения узлов, но я теряю идентичность того, к какому концептуальному узлу они принадлежат.

Так что моя проблема в том, что я хочу искать дочерние узлы вузел cfdi: Concept (если существует) и добавьте их в массив $ concepts (что-то вроде $ concepts [$ count] ['Transfer'] [$ count_transfer] ['amount']).

Обратите внимание, что:

  • Некоторые узлы понятий не имеют дочерних узлов.
  • Некоторые понятия имеют 1 узел cfdi: Transfer, некоторые имеют 2 узла.
  • Некоторые понятия имеютузел перенесенных налогов и узел нераспределенных налогов.

Заранее спасибо!

...