У меня есть 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 узла.
- Некоторые понятия имеютузел перенесенных налогов и узел нераспределенных налогов.
Заранее спасибо!