2016-06-28 2 views
0

두 개의 별도 XML 파일/문자열을 만드는 데 사용할 XSLT 파일이 있습니다. 문제는 동일한 템플릿 일치를 사용할 수 없다는 것입니다.단일 XSLT (Java)에서 두 개의 XML 파일 만들기

나는이있는 경우 :

<?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> 

그래서 내가 두 템플릿을 사용하여 두 개의 XML 파일을 만들려고합니다. 그러나 어디에서보아야할지 모르기 때문에 두 개의 동일한 템플릿을 사용하는 것은 허용되지 않습니다.

이것은 내가 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에 특정 확장자. 서로 다른 템플릿으로 노드를 두 번 처리하는 경우 모드를 사용하여 템플릿을 구별합니다. –

+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

감사! 그러나 그것을 저장합니까? 나는'xslt'와 같은 폴더에'result2.xml' 파일을 저장 하겠지만 거기에는 아무것도 없다고 생각했습니다. ''C : /users/mo/Documents/Project/result2.xml ''라는 경로를 지정하려고했지만 URI가 잘못되었다고합니다 ('c'가 무엇인지 모릅니다). –

+0

절대적인 로컬 파일 시스템 URI는'file : /// C :/users/mo/Documents/Project/result2.xml' –

+0

대단히 감사합니다! –

관련 문제