2009-05-12 11 views
21

bir öğeye bir String nesnesi (içeren XML) 'dönüşümü' için, ben XML öğeleri içeren bir String nesnesi vardır:nasıl Varolan JSP sayfasında Şu

String carsInGarage = garage.getCars(); 

Ben şimdi bu Dize geçmek istiyorum Bir giriş/akış kaynağı (veya bir çeşit kaynak), ancak hangisinin seçileceğini ve nasıl uygulanacağından emin değilim.

Baktığım çözümlerin çoğu paketi içe aktarır: javax.xml.transform ve XML dosyasını (stylerXML.xml) kabul eder ve bir HTML dosyasına (outputFile.html) gönderir (Bkz. Aşağıdaki kod).

try 
{ 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(new StreamSource("styler.xsl")); 

    transformer.transform(new StreamSource("stylerXML.xml"), new StreamResult(new FileOutputStream("outputFile.html"))); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

Mevcut bir JSP sayfası içinde bir String nesnesi ve bir elemana çıkışı (XSL kullanarak) kabul etmek istiyorum. Bunu nasıl uygulayacağımı bilmiyorum, hatta yukarıdaki kodu inceledim bile.

Lütfen birisi size yardımcı olabilir/yardımcı olabilir. Bir çözüm için yüksek ve düşük arama yaptım, ancak hiçbir şeyi çıkaramıyorum. bir noktada kaynak sadece tek bir dize daha içermesini veya el ile XML sarıcı eleman oluşturmak istemiyorsanız istiyorsanız

try { 
    StringReader reader = new StringReader("<xml>blabla</xml>"); 
    StringWriter writer = new StringWriter(); 
    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(
      new javax.xml.transform.stream.StreamSource("styler.xsl")); 

    transformer.transform(
      new javax.xml.transform.stream.StreamSource(reader), 
      new javax.xml.transform.stream.StreamResult(writer)); 

    String result = writer.toString(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

cevap

56

bir StringReader ve StringWriter kullanın Kaynağınızı içeren bir DOM belgesi ve bir DOMSource kullanarak transformatöre aktarın.

+0

Merhaba Bruno, Bu mükemmel cevap için teşekkürler. Şu anda düzgün bir şekilde derleniyor :) Ancak, yine de ekrana yazdıramıyorum. Şu anda deneme yapıyorum: out.println (yazar); ancak bu başarısız oluyor. – Lycana

+0

Belki de dönüşümde bir hata vardı ... tam olarak nasıl başarısız oluyor? –

+0

Tarayıcıya hiçbir şey yazdırılmadığı için başarısız olur. Deneme bloğumun alt kısmında: Dize sonucu = writer.toString(); out.print ("

" + result + "
"); Ayrıca, HTML gövdesinin içeriğini incelemek için Firebug adlı bir araç kurdum. Yine bir şey yok. – Lycana

0

Bu benim için çalıştı.

String str = "<my>xml</my>"  
StreamSource src = new StreamSource(new StringReader(str)); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
Result res = new StreamResult(baos); 
transformer.transform(src, res);