2016-06-28 8 views
0

2つのXMLファイル/ストリングを作成するために使用するXSLTファイルがあります。問題は、私は同じテンプレートマッチングを使用することができないということです。1つのXSLTから2つのXMLファイルを作成する(Java)

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="Frame/AAA"> 
     <xsl:for-each select="."> 
      <Frame xmlns="MyNamespace.com"> 
       <BBB> 
        <!-- Stuff here --> 
       </BBB> 
      </Frame> 
     </xsl:for-each> 
    </xsl:template> 

    <xsl:template match="Frame/AAA"> 
     <xsl:for-each select="."> 
      <Frame xmlns="MyNamespace.com"> 
       <WWW> 
        <!-- Stuff here --> 
       </WWW> 
      </Frame> 
     </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 

XMLファイル:私は、このお持ちの場合

<Frame> 
    <AAA> 
     <!-- Stuff here --> 
    </AAA> 
<Frame> 

をだから私は両方のテンプレートを使用して、2つのXMLファイルを作成したいです。ただし、同じテンプレートのうちの2つを使用することは、見た目がわからないため許可されません。

これは私がXMLファイルを作成するために使用するJavaコードです:

// Get stylesheet (xslt) and xml data file 
File stylesheet = new File(xsltFilepath); 
InputSource inputSource = new InputSource(new ByteArrayInputStream(xmlString.getBytes())); 

// Turn data file into document 
Document document = DocumentBuilderFactory.newInstance() 
     .newDocumentBuilder().parse(inputSource); 

// Hold XML markup 
StreamSource stylesource = new StreamSource(stylesheet); 
// Turn source into a transformer object 
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource); 
// Convert to a string 
StringWriter stringWriter = new StringWriter(); 
transformer.transform(new DOMSource(document), new StreamResult(stringWriter)); 

// Return the string 
return tringWriter.toString(); 

どのように私は私が望むものを達成することができますか?

+0

あなたサクソン9とXSLT 2.0と 'XSL場合にのみ、二つの別々の結果文書を作成することができます。その結果、document'またはXalanの固有の拡張機能。異なるテンプレートでノードを2回処理する場合、モードを使用してテンプレートを区別します。 –

+0

ありがとう、私はXSLT 2.0とモードを使用して調べます。例を提供することができれば、非常に役に立ちます。 –

答えて

1

XSLT 2.0とモードを使用する場合、たとえば

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

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
     <xsl:apply-templates/> 
     <xsl:apply-templates mode="m2"/> 
    </xsl:template> 

    <xsl:template match="Frame/AAA"> 

      <Frame xmlns="MyNamespace.com"> 
       <BBB> 
        <!-- Stuff here --> 
       </BBB> 
      </Frame> 

    </xsl:template> 

    <xsl:template match="Frame/AAA" mode="m2"> 
     <xsl:result-document href="result2.xml"> 
      <Frame xmlns="MyNamespace.com"> 
       <WWW> 
        <!-- Stuff here --> 
       </WWW> 
      </Frame> 
     </xsl:result-document> 
    </xsl:template> 

</xsl:stylesheet> 
+0

ありがとう!しかし、それはどこに保存されますか?私はファイル 'result2.xml'を' xslt'と同じフォルダに保存すると思っていましたが、そこには何もありません。私は '' C:/users/mo/Documents/Project/result2.xml ''というパスを与えようとしましたが、URIが不正であると言われています( 'c'が何であるか分かりません)。 –

+0

絶対ファイルシステムのURIは、絶対に 'file:/// C:/ users/mo/Documents/Project/result2.xml' –

+0

ありがとう! –

関連する問題