2

IzPack でインストーラーを作成しています。これは非常に大きいので、<xinclude> タグと <xfragment> タグを使用して XML ファイルを適切に分割しました。残念ながら、IzPack は、インストーラーをビルドするときにそれらを結合しません。これには、インストーラーでファイルをパッケージ化する必要がありますが、これは機能しません。

XML ファイルをロードして結合するためのツールを Java で書き始めようとしていましたが、車輪の再発明はしたくありません。

Java XML ライブラリは xinclude のネイティブ処理を提供しますか? グーグルはあまり出てこなかったようです。

これを自分で書かなければならない場合は大したことではありません。皆さんに確認したかっただけです。ありがとう。

例としての XML の形式: File1.xml

<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<installation version="1.0">
<packs>      
    <pack name="Transaction Service" id="Transaction Service" required="no" >
        <xinclude href="example/File2.xml" />
    </pack>
</packs>

File2.xml

<xfragment>
    <file src="..." />
</xfragment>

File2 には、標準の XML ヘッダーは必要ありません。xml ファイルは、指定されたリソースがインストーラーに含まれているため、ビルド時に解析されます。含まれていないのは、実際の XML 情報 (ファイルを書き込む順序、ファイルを配置する場所など) です。

私が生産しようとしているもの:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<installation version="1.0">
<packs>      
    <pack name="Transaction Service" id="Transaction Service" required="no" >
        <file src="..." />
    </pack>
</packs>

ありがとう、私は今Javaでそれをまとめ始めようとしていますが、誰かが簡単な答えを持っていることを願っています.

ティム・レイノルズ

4

5 に答える 5

1

xinclude が機能せず、Ant を使用している場合は、Ant のプラグイン タスクであるXMLTaskをお勧めします。フラグメントから XML ファイルを作成するという、あなたが興味を持っている 1 つのことを含めて、多くの巧妙な処理を実行します。

例えば

<xmltask source="templatefile.xml" dest="finalfile.xml">
  <insert path="/packs/pack[1]" position="under" file="pack1.xml"/>
</xmltask>

(警告 - 上記はメモリから行われているため、ドキュメントを参照してください!)。

上記で、ファイルpack1.xm l はルート ノードを持つ必要がないことに注意してください。

于 2008-09-16T16:33:25.843 に答える
0

これは現在機能します:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<installation version="1.0">
<packs>      
    <pack name="Transaction Service" id="Transaction Service" required="no" >
        <xi:include href="example/File2.xml" xmlns:xi="http://www.w3.org/2001/XInclude" />
    </pack>
</packs>

example / File2.xml

<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<xfragment>
    <file src="..." />
</xfragment>
于 2009-08-19T19:46:28.520 に答える
0

知りたい人だけに。IzPack は、nanoXML を使用してすべての構成ファイルを解析しました。名前空間はありません。また、xml インクルードは処理しません。

私が持っていた問題を解決するために、「xinclude」など(フラグメント/フォールバック)要素をパーサーのものに追加して、x:includeの標準にほとんど従うようにしました(名前の違いに気づきましたか?)1つは正しく、名前空間があります。もう 1 つは、名前空間を使用せずに標準に準拠しているふりをする厄介なハックです。

とにかく、これはずっと前のことであり、現在 IzPack は適切な XML パーサーを使用しており、正しく xi:include または使用したいプレフィックスを使用するかどうかを理解しており、問題はありません。適切な xml パーサーでは標準です。

于 2014-12-17T23:57:00.320 に答える
0

Java が自動 xinclude をサポートしているかどうかはわかりません。ただし、それを機能させるには名前空間を使用する必要があります。したがって、を使用しない<xinclude ....>で、次を使用します。

<xi:xinclude xmlns:xi="http://www.w3.org/2001/XInclude" href="example/File2.xml" />

通常、インクルード ファイルには xml ヘッダーも含まれている必要があります。たとえば、同じエンコーディングを持つ必要はありません。

于 2008-09-16T15:01:35.500 に答える
0

たとえば、Apache Xerces は Xinclude をサポートする必要がありますが、有効にする必要があります。

http://xerces.apache.org/xerces2-j/faq-xinclude.html

import javax.xml.parsers.SAXParserFactory;

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
spf.setXIncludeAware(true);

彼らのドキュメントには、機能として有効にできるとも書かれています

于 2009-02-10T20:35:12.850 に答える