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.