Informatica Powercenter: как запустить преобразование XSLT в документе XML - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть сложный XML-документ, который анализатор XML informatica пытается "нормализовать", как я могу выполнить преобразование XML, такое как XSLT, чтобы упростить его перед отправкой в ​​анализатор XML.

1 Ответ

5 голосов
/ 13 декабря 2011

Один из способов сделать это - использовать стандартное преобразование Java и использовать стандартный javax.xml.transform API для выполнения преобразования.

Для этого добавьте Java-преобразование в свой поток

enter image description here

На панели Import Packages импортируйте необходимые пакеты Java

enter image description here

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

В панели Helper Code мы создаем объект-трансформер.Как я понимаю, для каждого экземпляра создаются нестатические поля, поэтому не должно быть проблем с параллелизмом.( комментарии ? )

enter image description here

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-документа, выполнив метод transform дляобъект трансформатор.

enter image description here

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 );
...