Как импортировать внешние объекты XML, содержащие элементы с пользовательскими пространствами имен? - PullRequest
2 голосов
/ 16 апреля 2009

Попытка помочь другу здесь ... Есть некоторый вывод, сгенерированный внешним инструментом, который выводит узлы xml в файл. Ему нужно сделать этот XML правильно сформированным и применить к нему таблицу стилей xsl.

Итак, у нас есть b.xml (сгенерированный инструментом) и Encomp.xml, который импортирует содержимое b.xml в виде внешнего объекта XML, подобного этому (создайте 3 файла xml в одной папке, если вы хотите попробовать это )

Encomp.xml

<?xml version="1.0"  encoding="utf-8"?>

<!DOCTYPE document [ <!ENTITY data SYSTEM 'b.xml'>]>
<Root-Element xmlns:log="http://log4net.sourceforge.net/">
    &data;
</Root-Element>

b.xml

<log:MyNode Name="Node1"/>
<log:MyNode Name="Node2"/>
<log:MyNode Name="Node3"/>

a.xml

<MyNode Name="Node1"/>
<MyNode Name="Node2"/>

Теперь проблема в том, что этот подход работает с контентом, таким как a.xml (где узлы не определены пространством имен), но не работает для b.xml.

Я предполагаю, что, возможно, пространство имен не определено в строке DOCTYPE, оно объявлено только в следующей строке. Как мне заставить это работать?

1 Ответ

2 голосов
/ 16 апреля 2009

b.xml должен включать атрибут xmlns:log="http://log4net.sourceforge.net/"

EDIT : На самом деле это ничего не решает, суть в том, что DTD все равно не понимают объявления и псевдонимы xmlns. Следовательно, вы просто получите другие ошибки.

...