【发布时间】:2015-03-10 19:58:21
【问题描述】:
我有一个嵌套的文件夹结构结构,其中包含许多不同的文件(XML、DTD、XSL),其中 XML 文件引用其他 DTD、XSL 和其他 XML(也可以引用其他文件)。 IE。像这样(为简洁起见,我删除了一些类似的行):
all.xml - 根文件:
<?xml version="1.0" ?>
<!DOCTYPE notification [
<!ELEMENT notification ANY>
<!ENTITY % types SYSTEM "dtd/types.dtd">
<!ENTITY % from SYSTEM "dtd/from.dtd">
<!ENTITY types_en SYSTEM "lang/en/types.xml">
<!ENTITY from_en SYSTEM "lang/en/from.xml">
<!ENTITY subj_ru SYSTEM "lang/ru/subjects.xml">
<!ENTITY desc_en SYSTEM "lang/en/descriptions.xml">
<!ENTITY regexp_en SYSTEM "lang/en/placeholders.xml">
%types;
%from;
]>
<notification>
&types_en;
&from_en;
&templ_fr;
</notification>
lang/en/descriptions.xml
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="../../xsl/descriptions.xsl"?>
<!--DOCTYPE descriptions SYSTEM "../../dtd/descriptions.dtd"-->
<descriptions lang="en">
等等。因此,有一个根文件,其中包含 DTD 和许多其他文件,这些文件也包含自己的 DTD 和 XSL 表(不同的 XML 表)。
我需要找到将它们全部合并到一个文件中的方法。到目前为止,我发现的所有解决方案要么是合并多个独立的 XML 文件,要么是向文件添加单个 DTD(在我的情况下,不同的 DTD 应用于不同的文件,并不是所有的 XML 都是独立的,因为它们是嵌套的)。单个 XML 罚款的结果会很好。
或者,如果我能够将所有文件夹打包到一个文件 (.zip) 中,然后像 MS .docx 格式一样读取它(其中 .ZIP 文件表示具有工作引用的隔离文件系统),我几乎会很高兴在包含的文件之间)。该文件是用我自己的 C# 软件处理的,所以我不需要担心与其他 XML 阅读器的兼容性。但我不知道 .NET 中有什么方法可以让我像文件系统一样读取和 XML 解析 .ZIP 文件。
或者,也许有一种方法可以在使用 XmlTextReader 解析 XML 数据时捕获任何访问任何资源(无论是另一个 XML、DTD 还是 XSLT)的尝试?目的是能够拦截所有对丢失文件的请求,并在 XmlTextReader 请求时将所请求资源的内容提供给它们。
现在,我正在研究 System.IO.Packaging (OpenXML) 是否可以达到此目的。
【问题讨论】:
-
谢谢,如果没有其他帮助,将作为最后的手段尝试。