Ik heb een tool die het nodig vindt om door een XML document heen te wandelen. Iedere node wordt nader bekeken en geinspecteerd. Nu probeer ik voor de gein een XHTML document in te lezen, want dat moet per slot van rekening net zo goed werken. Wat blijkt, het kreng gaat overal allerlei xmlns attributen toe lopen voegen! Voorbeeldje:
Wordt:
Gewoon simpelweg door door alle nodes heen te wandelen, krijg ik dit soort taferelen. Die extra attributen zitten dan écht in de Attributes properties. En het ergste is dat ALLE element-nodes dit euvel vertonen.
Nóg erger is dat een Xpath expressies (hierdoor?) niet meer werken.
Moet ik dit aan MS gaan melden, of is hier in de tussentijd een workaround voor?
//edit
Ik zie net dat dit niet het enige is... ik kan de XML ook zo inladen:
Dan zijn die vrvelende namespaces verdwenen. Yay. Maar nu resten nog steeds twee problemen:
XML:
1
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl"> |
Wordt:
XML:
1
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="-//W3C//DTD XHTML 1.1//EN"> |
Gewoon simpelweg door door alle nodes heen te wandelen, krijg ik dit soort taferelen. Die extra attributen zitten dan écht in de Attributes properties. En het ergste is dat ALLE element-nodes dit euvel vertonen.
Nóg erger is dat een Xpath expressies (hierdoor?) niet meer werken.
Moet ik dit aan MS gaan melden, of is hier in de tussentijd een workaround voor?
//edit
Ik zie net dat dit niet het enige is... ik kan de XML ook zo inladen:
C#:
1
2
3
4
5
| XmlTextReader reader = new XmlTextReader(stream); reader.EntityHandling = EntityHandling.ExpandCharEntities; reader.ProhibitDtd = false; XmlDocument doc = new XmlDocument(); doc.Load(reader); |
Dan zijn die vrvelende namespaces verdwenen. Yay. Maar nu resten nog steeds twee problemen:
- De DTD wordt van w3c.org geladen. Kan ik voorkomen door reader.XmlResolver op null te zetten, maar dan gaat ie zeuren over ongedeclareerde entities. De vraag verandert dan dus in hoe zorg ik dat ie ze negeert en gewoon weergeeft als tekst?
- In de reader zit de property EntityHandling. Daarmee kun je entities "expanden" naar hun bijbehorende karakter. Dat is wel het láátste wat ik wil (zie punt 1). Maar ik kan alleen kiezen tussen het expanden van alleen character-entities (bijv & #39; (zucht, zelfs dit forum expand ze, vandaar de spatie)) en het expanden van alle entities. Maar de derde mogelijkheid (helemaal niet expanden) is er niet. Daarbij hoort dus de vraag hoe geen enkele entity expanden?
[ Voor 38% gewijzigd door _Thanatos_ op 16-10-2007 04:22 ]
日本!🎌