Wso2 当我从DSS服务向生成XML文档的ESB应用程序获取空值时,如何获取XML空标记?

Wso2 当我从DSS服务向生成XML文档的ESB应用程序获取空值时,如何获取XML空标记?,wso2,integration,wso2esb,wso2dss,Wso2,Integration,Wso2esb,Wso2dss,我是WSO2项目的新手,我有以下问题。我正在从事一个企业集成项目(涉及ESB和DSS组件) 我从包含在一些数据库表中的数据开始生成一个XML文档。这些数据使用相当复杂的逻辑进行聚合 我的问题如下: 在我的ESB流中我使用了这些链接丰富中介来创建最终XML文档的这一部分,代码如下: <!-- add placeholders for additional <sampleid> and <provenance> tags --> <enrich>

我是WSO2项目的新手,我有以下问题。我正在从事一个企业集成项目(涉及ESBDSS组件)

我从包含在一些数据库表中的数据开始生成一个XML文档。这些数据使用相当复杂的逻辑进行聚合

我的问题如下:

在我的ESB流中我使用了这些链接丰富中介来创建最终XML文档的这一部分,代码如下:

<!-- add placeholders for additional <sampleid> and <provenance> tags -->
<enrich>
    <source clone="true" type="inline">
        <parent xmlns="http://ws.wso2.org/dataservice">
            <sampleid>[pgrfas.prov_sid]</sampleid>
            <provenance>[pgrfas.provenance]</provenance>
        </parent>
    </source>
    <target property="moreValues" type="property"/>
</enrich>
<!--  Copy values for <sampleid> and <provenance> tags  -->
<enrich>
    <source clone="true" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:moreValues/child::*"/>
    <target action="child" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition"/>
</enrich>
<enrich>
    <source clone="true" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:sampleData//ds:Sample/ds:prov_sid/text()"/>
    <target action="child" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition/ds:sampleid/text()"/>
</enrich>

[pgrfas.prov_sid]
[pgrfas.出处]
正如您在第一个中介定义中所看到的,我通过以下方式定义了2XML元素():


[pgrfas.prov_sid]
[pgrfas.出处]
Ad I定义了2个占位符,该占位符应替换为通过以下中介链接从数据库获得的数据:

<enrich>
    <source clone="true" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:sampleData//ds:Sample/ds:prov_sid/text()"/>
    <target action="child" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition/ds:sampleid/text()"/>
</enrich>

<enrich>
    <source clone="true" xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:sampleData//ds:Sample/ds:provenance"/>
    <target xmlns:ds="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" xpath="$ctx:serviceCall//ds:register/ds:acquisition/ds:provenance"/>
</enrich>

这是该应用程序生成的最终XML文档中的相关部分:

<sampleid>coll_sid-001</sampleid>
<missid>coll_miss_id-001</missid>
coll_sid-001
coll_miss_id-001
其中,DSS服务从数据库中检索coll_sid-001coll_miss_id-001(以前放入$ctx:sampleData属性)

如果在执行了DSS查询的数据库表中,有与XML字段相关的值,它工作正常,我获得了以前的输出

如果此表包含这些字段的null值,则我将此输出转换为生成的XML:

<sampleid>[pgrfas.coll_sid]</sampleid>
<missid>[pgrfas.coll_miss_id]</missid>
[pgrfas.coll_sid]
[pgrfas.coll\u miss\u id]
如您所见,如果在DB表中找不到相关值,它会将定义的占位符放入生成的XML中

这对我的目的不好。如果数据库表中存在null值,我希望在生成的XML文档中获得一个空标记,如下所示:

<sampleid />
<missid />


如何解决此问题?在这种情况下,是否存在一些简单的解决方法来获取空标记?

尝试用这种方法创建您的文件

<enrich>
    <source clone="true" type="inline">
        <parent xmlns="http://ws.wso2.org/dataservice">
            <sampleid/>
            <provenance/>
        </parent>
    </source>
    <target property="moreValues" type="property"/>
</enrich>


您说您从一些db表生成xml。你能分享一些代码让我们看看你是怎么做到的吗?@frifle什么代码?这是一个WSO2 ESB应用程序,因此构建最终XML文档的代码是发布的XML配置,它是执行流的特定部分。你到底是什么意思?
<enrich>
    <source clone="true" type="inline">
        <parent xmlns="http://ws.wso2.org/dataservice">
            <sampleid/>
            <provenance/>
        </parent>
    </source>
    <target property="moreValues" type="property"/>
</enrich>