2017-11-29 17 views
0

に2行を追加する私は、このXMLファイルを持っている:私は別の<!ENTITY File_Name SYSTEM "file_location.xml">と別の&File_Name;の行を追加したいと思いますXSLT - どのように既存のXML

<!DOCTYPE configuration [ 
    <!ENTITY Reload_POST SYSTEM "Configuration_Reload_POST.xml"> 
]> 
<configuration name="Ibis4Education"> 
    <jmsRealms> 
     <jmsRealm realmName="jdbc" datasourceName="jdbc/${instance.name.lc}"/> 
     <!-- jmsRealm realmName="qcf" queueConnectionFactoryName="jms/qcf"/ --> 
    </jmsRealms> 
    &Reload_POST; 
</configuration> 

を...

私は経験していませんよXSLTを使っていて、Googleで良い例が見つからないので、私はここで尋ねています。

答えて

0

XSLTデータモデルはDTDもエンティティ参照も知らないため、拡張機能を持つプロセッサを使用してDTDの詳細とエンティティ参照を出力しない限り、XSLTはこれに適したタスクではありません。私は、サクソン9の商用版では、そのプロセッサでサポートされている2つの拡張命令については、https://www.saxonica.com/html/documentation/extensions/instructions/doctype.htmlhttps://www.saxonica.com/html/documentation/extensions/instructions/entity-ref.htmlを参照してください。これらの拡張命令を与えても、Andrew WelchがLexEv(http://andrewjwelch.com/lexev/)をツールチェーンに追加しない限り、既存のDTDを処理する方法がないかどうかはわかりません。

一般に、これはXSLTで解決できる作業ではありません。 DOMのような他のXMLツリー操作方法は、DTD操作に関しては制限されるかもしれません。

0

XML入力を有効にするには、予約済みXML文字&をエンティティに置き換えます。期待される出力を書いた方が簡単です:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 


<xsl:output method="xml"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
<xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE configuration [ 
<!ENTITY Reload_POST SYSTEM "Configuration_Reload_POST.xml"><!ENTITY File_Name SYSTEM "file_location.xml">]>]]></xsl:text> 
    <xsl:copy><xsl:apply-templates select="node()"/></xsl:copy> 
</xsl:template> 

<xsl:template match="configuration"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    <xsl:text>&amp;File_Name;</xsl:text> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 
関連する問題