【问题标题】:Birt: Webservice returns xml string..how to map to columns?Birt:Webservice返回xml字符串..如何映射到列?
【发布时间】:2015-07-07 22:08:09
【问题描述】:

我正在使用 wsdl/webservice url 连接到数据源。问题是这个 web 服务返回一个 xml 字符串作为输出。现在我的问题是我无法将其映射到正确的字段/列中。下面是一个返回的 xml 字符串示例

<?xml version="1.0" encoding="utf-8"?>
<response><items><item><nv_id>1</nv_id><nv_id_parent>0</nv_id_parent><nv_label>Satisfactory</nv_label></item><item><nv_id>2</nv_id><nv_id_parent>1</nv_id_parent><nv_label>Niveau admin</nv_label></item><item><nv_id>3</nv_id><nv_id_parent>2</nv_id_parent><nv_label>Enseigne</nv_label></item><item><nv_id>4</nv_id><nv_id_parent>3</nv_id_parent><nv_label>Magasin</nv_label></item></items></response>

我找到了一种解析 xml 并从中计算列的方法。但是,问题在于 xml 字符串作为单行返回,因此在计算列中仅提取第一行数据。如何从 xml 数据集中获取所有行?

我已经使用下面的代码来解析上面的 xml 并创建一个列。

importPackage(Packages.org.apache.xerces.parsers);
importPackage(Packages.org.xml.sax);
importPackage(Packages.java.io);

var parser = new DOMParser();
parser.parse(new InputSource(new StringReader(dataSetRow["return"])));
var nodelist = parser.getDocument().getElementsByTagName('nv_label');
var entry = nodelist.item(0).getFirstChild().getNodeValue();

entry;

现在的问题是 xml 作为单行字符串返回。 xml 字符串包含很多行,我想获取该列的所有这些行。我该怎么做?

P.S:我对 javascript 或 java 或 pojo 或脚本数据源不太擅长,所以如果您的解决方案将使用其中任何一个,请提供更多详细信息

【问题讨论】:

    标签: xml web-services birt


    【解决方案1】:

    如果您使用 BIRT Designer 来设计数据源连接,您首先要使用类似 http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL 的端点创建 WSDL 数据源。

    然后您创建数据集以从数据源中检索和构造。使用数据集向导将 XML 模式映射到列。

    然后您可以打开报告的 XML 以提取格式或立即开始从数据中制作报告。您可以设置很多值来检索您想要的内容。

    【讨论】:

    • 感谢您的回复。问题是 xml 作为字符串从数据集中返回。例如,看看plus.google.com/photos/103503173145476304072/photo/…plus.google.com/photos/103503173145476304072/photo/…。我的问题是行作为xml字符串返回后,如何解析成行和列
    • 基本上soap请求返回一个xml字符串。现在的问题是将返回的 xml 转换为行和列。
    • 您是否考虑过尝试将其设置为 XML 数据源?
    • 但响应是作为调用 wsdl 的结果返回的。我尝试将返回的 xml 字符串复制到一个文件中并将其用作数据源并且它可以工作。现在的问题是,每次根据参数等生成不同的 xml,所以我想动态解析这个 xml,而不是让它成为一个硬编码的 xml 文件
    • 啊,我没有意识到xml数据结构是动态变化的。如果列名和布局将定期更改,则可能难以在不使用多个数据源配置的情况下对其进行报告。 WSDL 可访问的数据源没有以正确格式的 XML 响应是否有原因?我的意思是,如果 WSDL 客户端 (BIRT) 无法将数据读取到 WSDL 请求中,这听起来像是数据级别的问题。您是否尝试过使用 SOAPUI 等其他 WSDL 客户端进行类似查询?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多