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



我对以下解决方案有点脑筋急转弯。目前,我的xslt和服务引擎将采用一个以Tab分隔的文件,将其分解为列,然后通过web服务地址将数据解析到各个公共安全机构。Tab分隔的文件从服务器发送到我的监视/文件夹,解析器及其xslt在那里查找预先解析的代理代码,并将其映射到最终的代理代码并将其发送到正确的代理。但是,如果同一文件中有3个代理,那么只有第一个代理在解析器消耗和转换时被发送,其他代理才有机会。下面是我当前代码的一个示例。我正在从F130、F131、F132和F133列进行映射。如果它们都在文件中,则只有F130被解析,而另一个被省略。想知道这是否可以解析到不同的帐户。:(感谢J.

这是我试图从示例文件^SGB134^SMD134^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>.....................

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

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

结果将总是是"SG",因为正如我们刚刚建立的那样,第一个命题是真的。

最新更新