如何导入包含具有自定义命名空间的元素的XML外部实体?

时间:2009-04-16 13:45:11

标签: xml xml-namespaces

尝试在这里帮助朋友...外部工具生成一些输出,将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 个答案:

答案 0 :(得分:2)

b.xml需要包含属性xmlns:log="http://log4net.sourceforge.net/"

编辑:实际上这并没有真正解决任何问题,但最重要的是DTD无论如何都不理解xmlns声明和别名。因此,您最终会遇到其他错误。