2016-01-14 87 views
1

下面是示例edi,我只需要通過XSL/XSLT轉換爲XML。我想知道如何解析/讀取和檢索從EDI的值如何通過Xsl讀取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

+1

** 1。您可以使用XSLT 2.0嗎? ** 2。**請提供預期的輸出並解釋如何從給定的輸入中生成它。 –

回答

0

解析EDI這將是最容易/最好使用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,你可以創建一個XML「包裝」的文件,其中包括您的EDI文本通過實體引用的內容。

<!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解析錯誤。

1

您不能使用XSLT 1.0解析XML以外的其他東西。所以這是不可能的使用XSLT 1.0

+0

爲什麼?有選項可以通過xslt處理csv到xml。同樣的EDI也是一個原始數據。是對的嗎?可能是一個難以處理的問題,但它會起作用。如果我錯了,請糾正我的錯誤 – Kathiresa

+0

「*您不能使用XSLT解析除XML以外的其他內容。*」這僅適用於XSLT 1.0。這並不意味着XSLT 2.0或更高版本是將文本轉換爲XML的最佳工具 - 但它肯定是可行的。 –

+0

謝謝michael,我會編輯我的帖子。 –