Citat:
CallMeSaMaster: Jednostavno zelim ukinuti ovaj namspace gdje god se nalazio u XMl-u. Moze li se to izvesti?
Odgovor je i da i ne. Naizgled je lako jer najobiciniji regex search/replace moze iz xmla da 'izbaci' xmlns="...". A razlog zasto to ne treba da radis cu ti dati uz ovaj primer, pogledaj ova dva xml fajla:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<root atribut="vrednost" xmlns="http://www.elitesecurity.org/p2466827/primer">
<osoba pol="muski">
<ime>pera</ime>
<prezime/>
</osoba>
</root>
Code:
<?xml version="1.0" encoding="UTF-8"?>
<mojns:root mojns:atribut="vrednost" xmlns:mojns="http://www.elitesecurity.org/p2466827/primer">
<mojns:osoba mojns:pol="muski">
<mojns:ime>pera</mojns:ime>
<mojns:prezime/>
</mojns:osoba>
</mojns:root>
Ova dva XMLa su IDENTICNA sa dve razlicite tekstualne reprezentacije. Imaju identican DOM i iste XSLT, XPath i XQuery operacije generisu identicne rezultate, itd, itd. Sto je najgore po tebe, ovih tekstualnih reprezentacija moze da bude beskonacno mnogo jer prefixmoze da bude bilo koji i sta vise moze da ih bude vise koji nose isti URI, npr:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<mojns:root mojns:atribut="vrednost"
xmlns:mojns="http://www.elitesecurity.org/p2466827/primer"
xmlns:tvojns="http://www.elitesecurity.org/p2466827/primer">
<mojns:osoba tvojns:pol="muski">
<mojns:ime>pera</mojns:ime>
<tvojns:prezime/>
</mojns:osoba>
</mojns:root>
Ovaj xml je identican kao gornja dva, ima dva prefixa ali oba imaju istu namespaceURI i po definiciji su isti.
Iz ovih razloga bi trebao da izbegavas bilo kakvo modifikovanje XML fajlova kao stringova, sto ukljucuje search/replace, skracivanje, konkatenaciju, itd, itd.. Zato kad pricam o XMLu obicno napomenem da je nesto "kosher" kao resenje koje funkcionise lepo i sa namespaceovima.
E sad, ako su ns1 i ns2 dva prefixa za dva razlicita namespace URIa onda su nodovi ns1:OsobaA i ns2:OsobaA dva potpuno razlicita tipa node-a bez obzira na to sto im je lokalno ime isto i DOM ih tretira kao razlicite tipove, okidaju ih razlicite xpath putanje, itd. i zbog toga ti imas problema jer mislis da su isto a nisu. Kontam da to nije tvojom krivicom jer ti dobijas te fajlove spolja ali feler u ovoj situaciji lezi na ljudima koji generisu xml fajlove koje ti salju jer ih markiraju bezveznim namespacovima. Koncept pretvaranja ns2:OsobaA u ns1:OsobaA je sa stanovista XMLa isti proces kao promena iz ns1:OsobaA u ns2:OsobaB, tj radi se o transformaciji nodova. Postoje dva koser resenja:
1. Primena XSLT transformacije sto je mozda malo overkill za tvoje potrebe
2. Promena Namespace-a za celo DOM stablo, sto se radi iterativno ili rekurzivno kroz klasicni C# kod ili kroz konstrukcije iz
LINQ for XML
U oba slucaja generisi XML koji ima tvoj fiksirani namespace (ili ukloni namespace kompletno) i imaces uniformni izlaz.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić