XML reading issue....

L

Lloyd Dupont

I have some XML file like that:

===
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>affiliateId</key>
<string>AFL9124395098</string>
...........................
===

Now when I'm reading them with XmlDocument or XmlTextReader the reader try
to connect to aple (because of <!DOCTYPE plist PUBLIC "-//Apple
Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">)
and that causes exception when there is no network (and of course the
XmlTextReader or XmlDocument fail to read the text)

The problem is: I don't care about apple schema, I do the reading myself and
it's going to be alllright.
Is there a way I could skip over it?

--
Regards,
Lloyd Dupont

NovaMind development team
NovaMind Software
Mind Mapping Software
<www.nova-mind.com>
 
J

John Saunders

Lloyd Dupont said:
I have some XML file like that:

===
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>affiliateId</key>
<string>AFL9124395098</string>
..........................
===

Now when I'm reading them with XmlDocument or XmlTextReader the reader try
to connect to aple (because of <!DOCTYPE plist PUBLIC "-//Apple
Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">)
and that causes exception when there is no network (and of course the
XmlTextReader or XmlDocument fail to read the text)

The problem is: I don't care about apple schema, I do the reading myself
and it's going to be alllright.
Is there a way I could skip over it?

I believe that if you set the XmlResolver property of the XmlTextReader to
null, it will ignore the remote DTD. If that doesn't do it, you could define
your own XmlResolver derived class which processes the remote DTD in any way
you like.

John
 
L

Lloyd Dupont

Thanks John!

However that doesn't work, if I disable the DTD, I get an XmlException: "The
DTD is deactivate, activate it this way..."

So I'm stuck between a rock and a hard place.
I don't want to valid the DTD because there is no network and the XML reader
doesn't want to read the XML document because the DTD is not validated...
 
P

Peter Flynn

Lloyd said:
Thanks John!

However that doesn't work, if I disable the DTD, I get an XmlException: "The
DTD is deactivate, activate it this way..."

So I'm stuck between a rock and a hard place.
I don't want to valid the DTD because there is no network and the XML reader
doesn't want to read the XML document because the DTD is not validated...

Just cut out the DocType Declaration before the file gets processed
(ie pass it through a filter of some kind, like sed).

Or filter it so that the SYSTEM Identifier resolves to a local file,
and keep a copy of the DTD at that filename.

///Peter
 
L

Lloyd Dupont

However that doesn't work, if I disable the DTD, I get an XmlException:
Just cut out the DocType Declaration before the file gets processed
(ie pass it through a filter of some kind, like sed).

I had avoid that if I could.
That makes it forgetfulness prone. Our Mac developer edit the fil with the
PList editor which puts that in. Every time they edit a file I will have to
go after them.....
Or filter it so that the SYSTEM Identifier resolves to a local file,
and keep a copy of the DTD at that filename.
that's interesting! how do I do that?
I tryed to set my own XmlResolver but, unless I write a bug during my
experimentation, that didn't work... (I'm a bit suspicious though...)
 
P

Peter Flynn

Lloyd said:
I don't want to valid the DTD because there is no network and the XML
reader doesn't want to read the XML document because the DTD is not
validated...
[me]
Just cut out the DocType Declaration before the file gets processed
(ie pass it through a filter of some kind, like sed).
[lloyd]
I had avoid that if I could.
That makes it forgetfulness prone. Our Mac developer edit the fil with the
PList editor which puts that in. Every time they edit a file I will have to
go after them...

OK, I thought this might be an automated process.

[me]
Or filter it so that the SYSTEM Identifier resolves to a local file,
and keep a copy of the DTD at that filename.
[lloyd]
that's interesting! how do I do that?

sed -e "s+http://www.apple.com+file:///some/directory+" old.xml >new.xml

This leaves you with output that starts like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"/some/directory/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

All you need to do is make sure you have a directory in the relevant
place in your tree called /some/directory/DTDs, and in it a copy of the
PropertyList-1.0.dtd file (which you get from Apple; plus any ancillary
files it references).

Now when you edit/process the document, it will validate against the
local copy. You can replace /some/directory with whatever is suitable
for your system.

sed is available for Microsoft systems both with and without Cygwin
support, I believe.

///Peter
 
L

Lloyd Dupont

mmh....
thanks ;-)

Peter Flynn said:
Lloyd said:
I don't want to valid the DTD because there is no network and the XML
reader doesn't want to read the XML document because the DTD is not
validated... [me]
Just cut out the DocType Declaration before the file gets processed
(ie pass it through a filter of some kind, like sed).
[lloyd]
I had avoid that if I could.
That makes it forgetfulness prone. Our Mac developer edit the fil with
the PList editor which puts that in. Every time they edit a file I will
have to go after them...

OK, I thought this might be an automated process.

[me]
Or filter it so that the SYSTEM Identifier resolves to a local file,
and keep a copy of the DTD at that filename.
[lloyd]
that's interesting! how do I do that?

sed -e "s+http://www.apple.com+file:///some/directory+" old.xml >new.xml

This leaves you with output that starts like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"/some/directory/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

All you need to do is make sure you have a directory in the relevant place
in your tree called /some/directory/DTDs, and in it a copy of the
PropertyList-1.0.dtd file (which you get from Apple; plus any ancillary
files it references).

Now when you edit/process the document, it will validate against the
local copy. You can replace /some/directory with whatever is suitable for
your system.

sed is available for Microsoft systems both with and without Cygwin
support, I believe.

///Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top