2
我有一個複雜的XML文檔,informatica XML解析器在「正常化」中掙扎,如何在發送之前運行XSLT之類的XML轉換以簡化它到XML解析器中。Informatica Powercenter:如何在XML文檔上運行XSLT轉換
我有一個複雜的XML文檔,informatica XML解析器在「正常化」中掙扎,如何在發送之前運行XSLT之類的XML轉換以簡化它到XML解析器中。Informatica Powercenter:如何在XML文檔上運行XSLT轉換
這樣做的一種方法是使用標準Java轉換並使用標準javax.xml.transform
API執行轉換。
爲此添加Java變換你的流量
在Import Packages
窗格中,導入所需的Java包
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
在Helper Code
窗格我們構建一個變壓器對象。據我所知,非靜態字段是每個實例創建的,所以應該沒有併發問題。 (評論?)
private final Transformer transformer = getNewTransformer();
public Transformer getNewTransformer()
{
// /opt/informatica/infadev/DataTransformation
final String IFCMPath = System.getenv("IFCONTENTMASTER_HOME");
final String xslt = IFCMPath + "/ServiceDB/xst/mytransform.xslt";
logInfo("Using XSLT File" + xslt);
try{
return TransformerFactory.newInstance().newTransformer(new StreamSource(xslt));
} catch(TransformerConfigurationException ex) {
logError("Could not create TransformerFactory with xslt " + xslt);
}
return null;
}
最後,我們執行由變壓器對象上執行的變換方法對傳入的XML文檔變換。
if(transformer == null) {
failSession("Transformer was null");
}
//final long startTime = System.nanoTime();
//final long endTime;
try {
//logInfo("Recieved xml with size " + xmlin.length());
// logInfo("Recieved xml " + xmlin);
final StringReader reader = new StringReader(xmlin);
final StringWriter writer = new StringWriter();
transformer.transform(new StreamSource(reader),new StreamResult(writer));
xmlout = writer.toString();
// logInfo("xmlout " + xmlout );
} catch (Exception e) {
incrementErrorCount(1);
logError(e.getMessage());
logError(xmlin);
}
//finally {
// endTime = System.nanoTime();
//}
//final long duration = endTime - startTime;
//logInfo("Duration " + duration/1000000000.0);