XiCes Xinclude Erro
Pergunta
Estou usando o Apache Xerces 3.0.1 Xinclude. Quero usar o mecanismo Xinclude para incluir arquivos XML. Eu tenho três arquivos XML, todos no mesmo diretório. test_a.xml xincludes test_b.xml que xincludes test_c.xml. Quando eu só tenho test_a.xml xinclude test_b.xml, ele funciona. No entanto, quando eu tenho test_b.xml xinclude test_c.xml, recebo o seguinte erro da linha de comando:
C: digital_receiver test> xinclude.exe test_a.xml test_z.xml parse test_a.xml em andamento ... erro fatal no arquivo c: digital_receiver test/test_a.xml, linha 3, char 34 mensagem: nenhum esquema encontrado em URI terminou.
test_a.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test_a xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="test_b.xml"/>
</test_a>
test_b.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test_b xmlns:xi="http://www.w3.org/2001/XInclude">
<ch>5</ch>
<xi:include href="test_c.xml"/>
</test_b>
test_c: xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test_c>
<channel>1</channel>
</test_c>
Qualquer ajuda seria apreciada.
Solução
Até onde eu sei, seu XML está ok, mas eu não afirmaria ser a última palavra sobre isso.
É meu acho Que você está acertando um bug no processamento Xinclude de Xerces. Eu observo que, embora esse código tenha quase três anos, aparentemente não foi Lançado até o Xerces 3.0, então pode ser relativamente não testado. (E dado a maneira que Uris básicos de documentos incluídos são tratados em Xinclude, a possibilidade de um bug aqui parece ser maior que 0.)
Como solução alternativa, sugiro fazer o que a mensagem de erro sugere: Adicione um esquema aos URIs para os arquivos incluídos. Infelizmente, para URIs de arquivo, isso também significa que você precisa usar um URI absoluto.
test_a.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test_a xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="file://path/to/directory/test_b.xml"/>
</test_a>
test_b.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test_b xmlns:xi="http://www.w3.org/2001/XInclude">
<ch>5</ch>
<xi:include href="file://path/to/directory/test_c.xml"/>
</test_b>
Atualização: existe de fato um bug semelhante em apache.org. (Eu acho que está descrevendo o mesmo problema, mas a redação no relatório faz parecer até mesmo um solteiro A camada de inclusão falharia ao usar caminhos relativos.)