你好。是否可以通过我的xslt将单个(制表符分隔)文件中的数据解析到不同的帐户

时间:2015-04-20 23:18:32

标签: xml parsing xslt xml-parsing xslt-1.0

我对以下解决方案有一点脑力锁定。目前,我的xslt和服务引擎将采用制表符分隔文件,将其分解为列,然后通过Web服务地址将数据解析到各个公共安全机构。制表符分隔文件从服务器发送到我的监视/文件夹,解析器及其xslt查找预解析的代理商代码并将其映射到最终代理商代码并将其发送到正确的代理商。但是,如果同一文件中有3个代理商,则只有第一个代理商会在其他代理商有机会之前进行解析器消费和转换。这是我当前代码的一个示例。  我从列F130,F131,F132和F133映射。如果它们都在文件中,则只有F130被解析而另一个被遗漏。想知道是否甚至可以解析出不同的帐户。 :(谢谢J.

这是我试图从示例文件中解析的列^ SGB1234 ^ SMD1234 ^ SMN1234 ^ SPS1234 ^

所以当

`"substring(/NewDataSet/Row[F1='H']/F130,1,3) = 'SGB'`

(我抓住前3个字母作为指示符)

然后为我的API wsdl

创建一个soap事件
`<ReportIncident xmlns="http://ee.com">
  <DispatchHeader>
   <AgencyIdentifierCode>
    <xsl:choose>
     <xsl:when test="substring(/NewDataSet/Row[F1='H']/F130,1,3)='SGB'">SG</xsl:when>
   </xsl:choose>
  <AgencyIdentifierCode>`

ReportIncident API的xml输出

<AgencyIdentifierCode>SG</AgencyIdentifierCode>

所以我想在所有这些内容中根据不同的情况创建一个ReportIncident推送到我的API到不同的帐户

<AgencyIdentifierCode>SG</AgencyIdentifierCode> <AgencyIdentifierCode>SMD</AgencyIdentifierCode> <AgencyIdentifierCode>SNM</AgencyIdentifierCode> <AgencyIdentifierCode>SPS</AgencyIdentifierCode>

使用下面的代码,我正在尝试。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ex="http://exslt.org/dates-and-times" extension-element-prefixes="ex">
  <xsl:strip-space elements="AgencyIdentifierCode"/>
<xsl:template match="/">
    <soap:Envelope xsl:version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <xsl:choose>
                <xsl:when test="substring(/NewDataSet/Row[F1='H']/F130,1,3) = 'SGB' and substring
                (/NewDataSet/Row[F1='H']/F131,1,3) = 'SMD' and substring
                (/NewDataSet/Row[F1='H']/F132,1,3) = 'SNM' and substring
                (/NewDataSet/Row[F1='H']/F133,1,3) = 'SPS'">
                    <ReportIncident xmlns="http://eee.com">
                        <DispatchHeader>
                            <AgencyIdentifierCode>
                                <xsl:choose>
                                    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F130,1,3)= 'SGB'">SG</xsl:when>
                                    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F131,1,3)= 'SMD'">WA12345</xsl:when>
                                    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F132,1,3)= 'SNM'">BAFD</xsl:when>
                                    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F133,1,3)= 'SPS'">1111</xsl:when>
                                </xsl:choose>
                            </AgencyIdentifierCode>.....................

1 个答案:

答案 0 :(得分:0)

我唯一能从你的问题中理解的是:你的第一个条件:

<xsl:when test="substring(/NewDataSet/Row[F1='H']/F130,1,3) = 'SGB' 
            and substring(/NewDataSet/Row[F1='H']/F131,1,3) = 'SMD' 
            and substring(/NewDataSet/Row[F1='H']/F132,1,3) = 'SNM' 
            and substring(/NewDataSet/Row[F1='H']/F133,1,3) = 'SPS'">

仅在4个命题的全部为真时才为真。因此,如果您进行第二次测试:

<xsl:choose>
    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F130,1,3)= 'SGB'">SG</xsl:when>
    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F131,1,3)= 'SMD'">WA12345</xsl:when>
    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F132,1,3)= 'SNM'">BAFD</xsl:when>
    <xsl:when test="substring(/NewDataSet/Row[F1='H']/F133,1,3)= 'SPS'">1111</xsl:when>
</xsl:choose>

结果始终是&#34; SG&#34;因为 - 正如我们刚刚建立的那样 - 第一个命题是真的。