Autor Téma: Remove node z XML  (Přečteno 238 krát)

Offline František

  • Guru
  • *****
  • Příspěvků: 635
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Remove node z XML
« kdy: 26-05-2021, 11:31:16 »
Pracujem s XML skoro 20 rokov ale len readonly, nikdy som doteraz nemal potrebu ich editovat, az doteraz
takze mam xml
Kód: Delphi [Vybrat]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Root>
  3.   <Item Id="1" Code="AAA">
  4.   </Item>
  5.   <Item Id="245" Code="CTHPE">
  6.    </Item>
  7.   <Item Id="288" Code="CT">
  8.   </Item>
  9. <Root>

no a potrebujem odstranit node s Code='AAA'
nic jednoduco pochopitelne/pouzitelne som na nete nenasiel

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3178
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Remove node z XML
« Odpověď #1 kdy: 26-05-2021, 13:08:24 »
nic jednoduco pochopitelne/pouzitelne som na nete nenasiel
No na urovni editovani textu nic existovat nebude, protoze tak se s XML nepracuje. A pak zalezi, co pouzivas pri praci s XML. Jestli DOM model, tak kazdy uzel (IXMLNode) ma property ChildNodes typu IXMLNodeList, a ten ma metodu Delete...

Offline František

  • Guru
  • *****
  • Příspěvků: 635
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Remove node z XML
« Odpověď #2 kdy: 26-05-2021, 14:31:18 »
myslel som nieco s XMLDocument
ale ako najdem ten spravny node
kedze hladam atribut

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3178
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Remove node z XML
« Odpověď #3 kdy: 27-05-2021, 09:14:19 »
myslel som nieco s XMLDocument
ale ako najdem ten spravny node
kedze hladam atribut
No budto to "pesky" prolezt, nebo zkusit XPath -> tam s tim bude trochu alchymie, protoze jeho podpora neni soucasti interface IXMLxxx a musi se o uroven niz na uroven MSXML parseru tj. IXMLDOMxxx. Takze pak by asi slo napsat neco takoveho:
Kód: Delphi [Vybrat]
  1. var
  2.   iDoc: IXMLDocument;
  3.   iDomNode: IXMLDomNode;
  4.   iMatchDomNode: IXMLDomNode;
  5. ...
  6.   iDomNode := (iDoc.DocumentElement.DOMNode as IXMLDOMNodeRef).GetXMLDOMNode;
  7.   iMatchDomNode := iDomNode.selectSingleNode('/Root/Item[@Code="AAA"]');
  8.   if Assigned(iMatchDomNode) then
  9.     iMatchDomNode.parentNode.removeChild(iMatchDomNode);
  10.  

   


Offline František

  • Guru
  • *****
  • Příspěvků: 635
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Remove node z XML
« Odpověď #4 kdy: 27-05-2021, 12:56:23 »
Kód: Delphi [Vybrat]
  1. iDoc.DocumentElement.DOMNode
DOMNode nepozna

Offline František

  • Guru
  • *****
  • Příspěvků: 635
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Remove node z XML
« Odpověď #5 kdy: 27-05-2021, 13:06:55 »
Kód: Delphi [Vybrat]
  1. iDomNode := iDoc.DocumentElement;
takto to šlape a robí čo má
vďaka