如何通过Xsl读取EDI的值?

时间:2016-01-14 08:38:06

标签: xslt

以下是我需要通过XSL / XSLT转换为XML的示例edi。我想知道如何解析/读取和检索EDI中的值

UNB+UNOA:2+SENDER-ID+RECEIVER-ID+090211:0811+0001+++++GEKU'
UNH+0001+BAPLIE:D:95B:UN:SMDG20'
BGM++0001+9'
DTM+137:0902110811:201'
TDT+20+00018NB+++GEK:172:ZZZ+++47AVS:103:ZZZ:SALERNO PRIDE:IT'
LOC+5+ITCAG:139:6'
LOC+61+ITSAL:139:6'
DTM+132:090211:101'
DTM+178:0902111230:201'
DTM+136:0902112330:201'
RFF+VON:GKS01A'
LOC+147+0010112::5'
MEA+WT++KGM:22500'
LOC+9+ITCAG:139:6'
LOC+11+ITSAL:139:6'
RFF+BM:1'
EQD+CN+GEKS1504090+22G1+++5'
NAD+CA+GEK:172:ZZZ'
UNT+18+0001'
UNZ+1+0001'

先谢谢。基本上需要一个XSL / XSLT

2 个答案:

答案 0 :(得分:1)

您无法使用XSLT 1.0解析除XML之外的其他内容。所以不可能使用XSLT 1.0解析EDI

答案 1 :(得分:0)

使用unparsed-text()函数加载处理EDI内容,使用 XSLT 2.0 执行此操作是最简单/最好的。使用XSLT 2.0,您可以使用高级字符串函数和正则表达式功能。

由于您的内容位于文本文件中,因此您可以使用任何XML(甚至是XSLT本身)作为输入XML文件,然后使用根节点的模板,加载文本文件并进行处理。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0">
    <xsl:output indent="yes"/>

    <xsl:template match="/">
        <xsl:variable name="edi" select="unparsed-text('edi.txt')"/>
        <xsl:value-of select="$edi"/>
        <!--do stuff with EDI text-->
    </xsl:template>

</xsl:stylesheet>

如果您使用 XSLT 1.0 ,则可以通过实体引用创建包含EDI文本内容的XML“包装”文档。

<!DOCTYPE edi [
    <!ENTITY edi_text SYSTEM "edi.txt">  
]>
<edi>
    &edi_text;
</edi>

然后,解析并处理包装器XML文档。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">
    <xsl:output indent="yes"/>

    <xsl:template match="edi">
        <!--do stuff with EDI text-->
    </xsl:template>

</xsl:stylesheet>
  

注意:这可能证明不可靠。如果您的EDI文字包含任何&   或<个字符,您将收到XML解析错误。