verwijder xmltag inclusief inhoud
Ik heb een XML-string, waar ik een tag uit verwijderd wil hebben. Ik kan geen gebruik maken van SimpleXML, omdat het formaat exact gelijk moet blijven.
De oplossing is denk ik door gebruik te maken van de preg_replace functie. Maar ik ben op zoek naar het goed pattern. Ik wil dus de <tag>inhoud</tag> weghebben, helemaal dus. De inhoud van deze tag is variabel dus vandaar dat het op deze manier moet.
Ik hoop dat iemand wat inspiratie heeft :-)
XML => inlezen in DOM => bewerken => XML
Quote:
Dat is natuurlijk onzin, je opent dit topic omdat je juist niet hetzelfde formaat wilt hebben... Anders zou je niets hoeven te verwijderen.omdat het formaat exact gelijk moet blijven.
En over verwijderen gesproken, waarom zou je een tag willen verwijderen? Het zit niemand echt in de weg, gewoon niet gebruiken en klaar is kees. Dat is nu net één van de pluspunten van XML, je kunt eenvoudig aanwijzen wat je wel en niet wilt gebruiken.
Ps. preg_replace slaat nergens op wanneer je met XML aan het werk bent, er zijn genoeg XML-functies die vele malen handiger zijn. En jouw XML intact laten.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Ik ben dus op zoek naar een pattern wat een tag inclusief zijn inhoud verwijderd.
Quote:
in mijn geval moet alles gelijk blijven.
En
Quote:
Ik heb een XML-string, waar ik een tag uit verwijderd wil hebben.
Dat gaat dus niet lukken. Je kunt onmogelijk dezelfde XML houden en ondertussen een deel van de XML verwijderen. Gaat niet.
Wanneer jij de ene XML wilt omzetten naar de andere XML, gebruik dan XSLT, dat is er voor gemaakt. De T staat voor Transformeren.
Maar geef eens een voorbeeldje of een url naar de XML, dan kunnen we even kijken hoe je snel en simpel een stuk eruit kunt slopen. En vergeet het verhaal dat de XML hetzelfde moet blijven, dat gaat niet. De structuur kan uiteraard wel hetzelfde blijven, dat kun je met XSD controleren.
Ok, vergeet even helemaal het woordje XML. Ik weet wat er allemaal mogelijk is met XSD en XSLT. Maar ik het een string waarin 'toevallig' XML tags staan. Ik wil dus de string <tag>waarde</tag> weghebben uit een string.
Blijkbaar wil je geen hulp hebben, ook goed.
Verder snap ik niet waarom je niet met dom wilt gaan werken, als je raar gaat doen met regex'en enzo dan krijg je volgens mij alleen maar meer problemen.
Jammer van de oplossing die hier ligt, maar dat is een DOM-oplossing en die wil je blijkbaar niet hebben.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Hieronder de code die ik kan gebruiken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
if(@simplexml_load_string($bericht)){
if($xmlObject = new SimpleXMLElement($bericht)){
if($agrcontent = $xmlObject->xpath('//VMA/llr')){
$bericht_agrid = $agrcontent[0]->AgrId;
$bericht_test = $agrcontent[0]->Test;
$bericht_combinr = $agrcontent[0]->Combinr;
$bericht_storing = $agrcontent[0]->Storing;
$bericht_vdm = $agrcontent[0]->Vdmnr;
$bericht_compleet = $agrcontent[0]->Compleet;
$bericht_deksel = $agrcontent[0]->Deksel;
$bericht_vdmgpsloc = $agrcontent[0]->VdmGpsLoc;
$bericht_vdmgpsdatum = $agrcontent[0]->VdmGpsDat;
$bericht_vdmgpstijd = $agrcontent[0]->VdmGpsTijd;
$bericht_mongpsloc = $agrcontent[0]->MonGpsLoc;
$bericht_mongpsdatum = $agrcontent[0]->MonGpsDat;
$bericht_mongpstijd = $agrcontent[0]->MonGpsTijd;
$bericht_laadgpsloc = $agrcontent[0]->LadGpsLoc;
$bericht_laadgpsdatum = $agrcontent[0]->LadGpsDat;
$bericht_laadgpstijd = $agrcontent[0]->LadGpsTijd;
$bericht_losgpsloc = $agrcontent[0]->LosGpsLoc;
$bericht_losgpsdatum = $agrcontent[0]->LosGpsDat;
$bericht_losgpstijd = $agrcontent[0]->LosGpsTijd;
//haal de pintag uit het bericht
unset($xmlObject->pin);
$bericht = (string)$xmlObject->asXML();
//voeg versietag toe
$xmlObject->addChild('ver','1.1');
$bericht = (string)$xmlObject->asXML();
if($xmlObject = new SimpleXMLElement($bericht)){
if($agrcontent = $xmlObject->xpath('//VMA/llr')){
$bericht_agrid = $agrcontent[0]->AgrId;
$bericht_test = $agrcontent[0]->Test;
$bericht_combinr = $agrcontent[0]->Combinr;
$bericht_storing = $agrcontent[0]->Storing;
$bericht_vdm = $agrcontent[0]->Vdmnr;
$bericht_compleet = $agrcontent[0]->Compleet;
$bericht_deksel = $agrcontent[0]->Deksel;
$bericht_vdmgpsloc = $agrcontent[0]->VdmGpsLoc;
$bericht_vdmgpsdatum = $agrcontent[0]->VdmGpsDat;
$bericht_vdmgpstijd = $agrcontent[0]->VdmGpsTijd;
$bericht_mongpsloc = $agrcontent[0]->MonGpsLoc;
$bericht_mongpsdatum = $agrcontent[0]->MonGpsDat;
$bericht_mongpstijd = $agrcontent[0]->MonGpsTijd;
$bericht_laadgpsloc = $agrcontent[0]->LadGpsLoc;
$bericht_laadgpsdatum = $agrcontent[0]->LadGpsDat;
$bericht_laadgpstijd = $agrcontent[0]->LadGpsTijd;
$bericht_losgpsloc = $agrcontent[0]->LosGpsLoc;
$bericht_losgpsdatum = $agrcontent[0]->LosGpsDat;
$bericht_losgpstijd = $agrcontent[0]->LosGpsTijd;
//haal de pintag uit het bericht
unset($xmlObject->pin);
$bericht = (string)$xmlObject->asXML();
//voeg versietag toe
$xmlObject->addChild('ver','1.1');
$bericht = (string)$xmlObject->asXML();
Dis wat ik wil, maar.... het is van belang dat de tag die ik toevoeg Vooraan komt te staan en er niet achter. Denk nu niet meteen dat dit niet uitmaakt. Deze xml wordt op andere plaatsen op hele andere manieren uitgelezen, dus de plaats van een tag is wel degelijk van belang. Ik besef me dat dit de kracht van XML bijna nihil maakt, maar het is nu eenmaal zo. Verder wordt door de functie asXML de XML als echte goede XML omgezet, dus lege tags worden <legetag /> dit is juist, maar is niet wat ik wil.
Dus komop Frank, denk niet even in één richting! Dat is gewoon niet mogelijk.
Gewijzigd op 01/01/1970 01:00:00 door Simon Blok