2016-06-28 2 views
0

У меня есть файл XSLT, который я хочу использовать для создания двух отдельных файлов XML/Strings. Проблема в том, что я не могу использовать один и тот же шаблон.Создайте два XML-файла из одного XSLT (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> 

Так я хочу использовать как шаблоны и создавать два XML-файлов. Однако использование двух одинаковых шаблонов не допускается, так как не знает, где искать.

Это код Java я использую для создания XML-файлы:

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

Вы можете создавать только два отдельных результирующих документа, если вы используете Saxon 9 и XSLT 2.0 и 'xsl: result-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

Спасибо! Однако, где он его сохраняет? Я думал, что он сохранит файл 'result2.xml' в той же папке, что и' xslt', но там ничего нет. Я попытался дать ему путь: «C: /users/mo/Documents/Project/result2.xml», но он говорит, что URI искажен (не знает, что такое «c»). –

+0

Локальный URI файловой системы, который является абсолютным, является 'file: /// C:/users/mo/Documents/Project/result2.xml' –

+0

Большое спасибо! –

Смежные вопросы