Re: [xml] How to continue reading with a xmlTextReader after warning?



On Saturday 26 September 2009 00:49:21 you wrote:
I got stuck reading a file with relative URI as xmlns specification, e.g
xmlns:foo="./bar/[...]".

On xmlTextReaderRead(), a warning is generated (relative URIs are
 deprecated) and the return value is '-1'. As I know that the files in
 question contain this problem, I'd like to skip this particular error.
 Subsequent calls to xmlTextReaderRead() seem not to advance to any of the
 later nodes but always return '-1'. Thus I assume that one would somehow
 need to reset the internal state of the xmlTextReader after the first
 return of '-1' - but there seems to be no (obvious) way to do so?! Using
 xmlReadFile(), the same warning is issued, but the tree is available
 afterwards.

This seems to be quite similar to a previous problem [1,2], there the URI
 was empty, not relative?!

To follow-up on myself, the problem is apparently only related to default 
namespaces:

$> gcc -o reader1 `xml2-config --cflags` reader1.c  `xml2-config --libs`

$> cat test1.xml && ./reader1 test1.xml
<?xml version="1.0"?>
<myroot xmlns:myns="http://absolute"/>
0 1 myroot 1 0

$> cat test2.xml && ./reader1 test2.xml
<?xml version="1.0"?>
<myroot xmlns:myns="relative"/>
0 1 myroot 1 0

$> cat test3.xml && ./reader1 test3.xml
<?xml version="1.0"?>
<myroot xmlns="http://absolute"/>
0 1 myroot 1 0

$> cat test4.xml && ./reader1 test4.xml
<?xml version="1.0"?>
<myroot xmlns="relative"/>
test3.xml:2: namespace warning : xmlns: URI relative is not absolute
<myroot xmlns="relative"/>
                        ^
test3.xml : failed to parse


Further:
$> xmllint test4.xml
test4.xml:2: namespace warning : xmlns: URI relative is not absolute
<myroot xmlns="relative"/>
                        ^
<?xml version="1.0"?>
<myroot xmlns="relative"/>

$> xmllint --stream test4.xml
test4.xml:2: namespace warning : xmlns: URI relative is not absolute
<myroot xmlns="relative"/>
                        ^
test4.xml : failed to parse


Any feasible way to work around the problem (besides rewriting everything to 
use the DOM interface)?

Thanks

        Daniel



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]