【发布时间】:2021-11-18 23:07:40
【问题描述】:
我正在练习 XML DOM PHP 解析。我有这样的 XML 文件(较短的版本):
<?xml version="1.0" encoding="UTF-8"?>
<tabela_kursow typ="A" uid="21a184">
<numer_tabeli>184/A/NBP/2021</numer_tabeli>
<data_publikacji>2021-09-22</data_publikacji>
<pozycja>
<nazwa_waluty>bat (Tajlandia)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>THB</kod_waluty>
<kurs_sredni>0,1181</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty id="2">dolar amerykański</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>USD</kod_waluty>
<kurs_sredni>3,9460</kurs_sredni>
</pozycja>
</tabela_kursow>
我为两个 Tag 元素创建了名为“id”和值为“2”的属性。
<?php
$doc = new DOMDocument();
$doc->load("kursy_walut.xml");
$doc->preserveSpace = false;
$doc->formatOutput = true;
$a = $doc->getElementsByTagName("nazwa_waluty");
$b = count($a);
for ($i=0; $i<$b; $i++){
$c = $a[$i]->childNodes[0]->nodeValue;
if ($c === 'dolar amerykański'){
$a[$i]->setAttribute('id', '2');
}
if ($c === 'euro'){
$a[$i]->setAttribute('id', '2');
}
}
$doc->save('output.xml');
现在我想:
- 只获取不包含属性'id="2"'的标签元素;
- 仅获取包含仅'id="2"'的标签元素。
对于第一种情况,我创建了这样的代码。不知道如何创建第二种情况。
$doc3 = new DOMDocument();
$doc3->preserveWhiteSpace = false;
$doc3->load('output.xml');
$xpath2 = new DOMXPath($doc3);
$id3 = $xpath2->query('//*/pozycja/nazwa_waluty[@id="2"]');
foreach($id3 as $attr){
$attr->parentNode->removeChild($attr);
}
$doc3->formatOutput = true;
$doc3->save('output3.xml');
也许有人可以帮助我处理第二种情况? 谢谢。
【问题讨论】:
-
此类任务最好使用 XSLT。