webForumDet fria alternativet

Läsa in icke-validerande dokument i DOM-objekt?

XML

4 svar · 384 visningar · startad av @nders

Medlem sedan juni 200032 967 inlägg
Frågan#1

Hej!

Jag har ett problem.
På disk har jag en xml-fil med en dtd-deklaration.
Filen kan se ut så här:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE foobar SYSTEM "http://foo.bar.se/dtd/foobar.dtd">
<foobar>
	<foo msgid="DX1342142GZH">
		<bar>
			<Head>
				...
				...
			</Head>
			<Body>
				...
				...
			</Body>
		</ORDERS>
	</foo>
</foobar>

Denna fil vill jag lägga in i ett objekt av typen MSXML2.DOMDocument, och det skulle inte vara några problem, egentligen.
Nu är det bara så att filen http://foo.bar.se/dtd/foobar.dtd inte alltid är tillgänglig, och då går inläsningen av min fina xml-fil åt pipsvängen. Den enkla, normalt fungerande, koden ser ut någonting sånt här i VB eller liknande språk:

Dim objDocRoot as MSXML2.IXMLDomElement
Dim objFoo As New MSXML2.DOMDocument
objFoo.validateOnParse = false
objFoo.async = False
objFoo.setProperty "ServerHTTPRequest", true
objFoo.load "c:\foo\bar\foobar.xml"
[i]set objDocRoot = objFoo.documentElement[/i]

Markerad kodrad ger ett Object required-felmeddelande då DTD:n är otillgänglig. (objFoo är 'Nothing')

Någon med idéer om hur jag säger åt mitt program att ge fullständigt fan i ett försöka validera det jag vill läsa in i objektet?
Måste jag spara en kopia av filen utan dtd-referens?

Mvh och tpf,

Medlem sedan dec. 2002258 inlägg
#2

Jag skulle nog läsa in filen som en txt-buffer, plocka bort dtd-referensen med ett regexp och sedan spara filen temporärt för xml inläsning igen.

Känns som att det ska vara enklast.

Medlem sedan juni 200032 967 inlägg
#3

Jag har funderat på den saken, men det känns som ett himskans felaktigt sätt att lösa problemet på. Jag vill ju lösa problemet på ett bra sätt, liksom. :)

Medlem sedan juli 20013 378 inlägg
#4

Hmm...

Du har en extern DTD...
Har du testat om du kan använda resolveExternals (som kontrollerar huruvida "externa "delar" av dokumentet, t.ex. DTD:n, skall läsas in vid validering eller ej) för att komma förbi problemet på något sätt?

Medlem sedan juni 200032 967 inlägg
#5

jarvklo, tack! :f

Du har återigen räddat mig ur en liten knipa.
Det verkar räcka alldeles utmärkt bara att lägga till resolveExternals=false.

Vad lätt allt är när man kan det. :)

Tack igen!

269 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)