Informatica Powercenter:如何对 XML 文档运行 XSLT 转换

发布于 2024-12-20 23:06:07 字数 92 浏览 1 评论 0 原文

我有一个复杂的 XML 文档,informatica XML 解析器很难对其进行“规范化”,如何在将其发送到 XML 解析器之前运行 XSLT 等 XML 转换来简化它。

I have a complex XML document that the informatica XML parser struggles with "normalizing", how can I run a XML transformation such as XSLT to simplfy it prior to sending it into the XML parser.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

微凉徒眸意 2024-12-27 23:06:07

实现此目的的一种方法是使用标准 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;
}

我们通过在转换器对象上执行transform方法来对传入的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 );

One way of doing this is to use the standard Java transform and use the standard javax.xml.transform API to perform the transformation.

To do this add a Java Transform to your flow

enter image description here

In the Import Packages pane, import the required java packages

enter image description here

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

In the Helper Code pane we construct a transformer object. As I understand non static fields are created per instance, so there should be no concurrency issues. (comments?)

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;
}

Finally we execute the transform on the incoming xml document by executing the transform method on the transformer object.

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 );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文