以下是我需要通过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
答案 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解析错误。