Friday, December 4, 2015

BizTalk - A Quick XPath to Read EDI Data

All node and attribute names are case sensitive; all functions need to be lower case.

/X12_00401_810/ST/ST01
ST01: 810
Find ST01
X12_00401_810/ST/ST01
ST01: 810
Find ST01
//ST/ST01
ST01: 810
Find ST01
//ST01
ST01: 810
Find ST01
*/*/ST01
*//ST01
ST01: 810
Find ST01 with wildcard
//IT1Loop1[1]/IT1/IT103
//IT1Loop1[1]/*/IT103
IT103: EA
Retrieve a value with a fixed path or ignore the path in the middle
//N1Loop1[N1/N101 = "SO"]/N1/N102
//N1Loop1[*/N101 = "SO"]/N1/N102
N102: TestSoldtoName
Find the value of N102 with N101 = “SO”
//N1Loop1[1]/N1/*
N101: BT
N102: TestBilltoName
Select all child nodes of N1
//@Comment
@Comment: BillTo Address
@Comment: RemitTo Address
@Comment: ShipTo Address
@Comment: ShipFrom Address
@Comment: Supplier Address
@Comment: SoldTo Address
Retrieve all Comment attributes
//N1Loop1[1]/@Comment
@Comment: BillTo Address
Retrieve the Comment attribute of N1Loop1
//N1Loop1[last()]/@Comment
@Comment: SoldTo Address
Retrieve the last attribute
//N1Loop1[position()<3]/@Comment
@Comment: BillTo Address
@Comment: RemitTo Address
Retrieve the first 2 attributes
//N1Loop1[1]/@*
@Comment: BillTo Address
Select all attributes of one node
//N1Loop1[@*]/N1/N101
N101: BT
N101: RI
N101: ST
N101: SF
N101: FR
N101: SO
Selects all title elements which have at least one attribute of any kind
//N1Loop1[1]/N1/N101 | //N1Loop1[2]/N1/N101
N101: BT
N101: RI
Retrieve the first 2 nodes
//IT1Loop1/SACLoop1/SAC/SAC05
//IT1Loop1/*/*/SAC05
SAC05: 31650
SAC05: 2133
SAC05: 617
Used fixed path or wild card to retrieve nodes
//IT1Loop1[SACLoop1/SAC/SAC05 > 2000]//SAC05
//IT1Loop1[*/*/SAC05 > 2000]//SAC05
SAC05: 31650
SAC05: 2133
Use conditional predicate to retrieve nodes
//IT1Loop1//*[name() = 'IT109']
//IT1Loop1//parent::*[name() = 'IT1']/IT109
//*[starts-with(name(), 'IT1Loo')]//IT109
IT109: RX030UP#ABA
IT109: EN488AA#ABA
IT109: F2100A
Retrieve IT108 using name()
//N1Loop1[contains(@Comment, 'ShipTo')]/N1/N102
N102: TestShipName
Retrieve N102 using contains()
//*[contains(name(), 'N1')  and contains(@Comment, 'ShipTo')]/@Comment
@Comment: ShipTo Address
Retrieve a node contains ‘N1’ and @Comment contains ‘ShipTo’







Sample EDI XML:

<X12_00401_810>
<ST>
<ST01>810</ST01>
<ST02>0770</ST02>
</ST>
<BIG>
<BIG01>20150714</BIG01>
<BIG02>V103_Lim</BIG02>
<BIG03>20100425</BIG03>
<BIG04>TestPO1</BIG04>
<BIG07>DI</BIG07>
<BIG08>00</BIG08>
</BIG>
<N1Loop1 Comment="BillTo Address">
<N1>
<N101>BT</N101>
<N102>TestBilltoName</N102>
</N1>
<N2>
<N201>TestBilltoName</N201>
</N2>
<N3>
<N301>TestBillto Addr1</N301>
</N3>
<N4>
<N401>TestBillToCity</N401>
<N402>VA</N402>
<N403>20175</N403>
<N404>US</N404>
</N4>
</N1Loop1>
<N1Loop1 Comment="RemitTo Address">
<N1>
<N101>RI</N101>
<N102>TestRemittoName</N102>
</N1>
<N2>
<N201>TestRemittoName</N201>
</N2>
<N3>
<N301>TestRemitot Addr1</N301>
</N3>
<N4>
<N401>TestRemittoCity</N401>
<N402>VA</N402>
<N403>20176</N403>
<N404>US</N404>
</N4>
<REF_2>
<REF01>BAA</REF01>
<REF02>54-1904151</REF02>
</REF_2>
</N1Loop1>
<N1Loop1  Comment="ShipTo Address">
<N1>
<N101>ST</N101>
<N102>TestShipName</N102>
</N1>
<N2>
<N201>TestShipName</N201>
</N2>
<N3>
<N301>TestShip Addr1</N301>
</N3>
<N4>
<N401>TestShipCity</N401>
<N402>VA</N402>
<N403>20172</N403>
<N404>US</N404>
</N4>
</N1Loop1>
<N1Loop1  Comment="ShipFrom Address">
<N1>
<N101>SF</N101>
<N102>TestShipfromName</N102>
</N1>
<N2>
<N201>TestShipfromName</N201>
</N2>
<N3>
<N301>TestShipfrom Addr1</N301>
</N3>
<N4>
<N401>TestShipFromCity</N401>
<N402>VA</N402>
<N403>20174</N403>
<N404>US</N404>
</N4>
</N1Loop1>
<N1Loop1  Comment="Supplier Address">
<N1>
<N101>FR</N101>
<N102>TestSupplierName</N102>
</N1>
<N2>
<N201>TestSupplierName</N201>
</N2>
<N3>
<N301>TestSupplier Addr1</N301>
</N3>
<N4>
<N401>TestSupplierCity</N401>
<N402>VA</N402>
<N403>20177</N403>
<N404>US</N404>
</N4>
</N1Loop1>
<N1Loop1  Comment="SoldTo Address">
<N1>
<N101>SO</N101>
<N102>TestSoldtoName</N102>
</N1>
<N2>
<N201>TestSoldtoName</N201>
</N2>
<N3>
<N301>TestSoldto Addr1</N301>
</N3>
<N4>
<N401>TestSoldtoCity</N401>
<N402>VA</N402>
<N403>20173</N403>
<N404>US</N404>
</N4>
</N1Loop1>
<IT1Loop1>
<IT1>
<IT101>1</IT101>
<IT102>1</IT102>
<IT103>EA</IT103>
<IT104>1131.17</IT104>
<IT108>VP</IT108>
<IT109>RX030UP#ABA</IT109>
</IT1>
<CUR_2>
<CUR01>SE</CUR01>
<CUR02>USD</CUR02>
</CUR_2>
<PIDLoop1>
<PID_2>
<PID01>F</PID01>
<PID05>NC6400 INTEL CORE 2 DUO T7200 2.0GHZ, 667 FSB, 1GB</PID05>
</PID_2>
</PIDLoop1>
<REF_3>
<REF01>FJ</REF01>
<REF02>1</REF02>
</REF_3>
<SACLoop1>
<SAC>
<SAC01>C</SAC01>
<SAC02>H850</SAC02>
<SAC05>31650</SAC05>
<SAC15>Sales Tax</SAC15>
<SAC16>EN</SAC16>
</SAC>
<TXI_2>
<TXI01>ST</TXI01>
<TXI02>316.5</TXI02>
</TXI_2>
</SACLoop1>
</IT1Loop1>
<IT1Loop1>
<IT1>
<IT101>2</IT101>
<IT102>1</IT102>
<IT103>EA</IT103>
<IT104>76.5</IT104>
<IT108>VP</IT108>
<IT109>EN488AA#ABA</IT109>
</IT1>
<CUR_2>
<CUR01>SE</CUR01>
<CUR02>USD</CUR02>
</CUR_2>
<PIDLoop1>
<PID_2>
<PID01>F</PID01>
<PID05>HP DOCKING STATION 1.1</PID05>
</PID_2>
</PIDLoop1>
<REF_3>
<REF01>FJ</REF01>
<REF02>2</REF02>
</REF_3>
<SACLoop1>
<SAC>
<SAC01>C</SAC01>
<SAC02>H850</SAC02>
<SAC05>2133</SAC05>
<SAC15>Sales Tax</SAC15>
<SAC16>EN</SAC16>
</SAC>
<TXI_2>
<TXI01>ST</TXI01>
<TXI02>21.33</TXI02>
</TXI_2>
</SACLoop1>
</IT1Loop1>
<IT1Loop1>
<IT1>
<IT101>3</IT101>
<IT102>1</IT102>
<IT103>EA</IT103>
<IT104>23.33</IT104>
<IT108>VP</IT108>
<IT109>F2100A</IT109>
</IT1>
<CUR_2>
<CUR01>SE</CUR01>
<CUR02>USD</CUR02>
</CUR_2>
<PIDLoop1>
<PID_2>
<PID01>F</PID01>
<PID05>MOUSE USB OPTICAL TRAVEL OB XE3 500 6000 6100</PID05>
</PID_2>
</PIDLoop1>
<REF_3>
<REF01>FJ</REF01>
<REF02>3</REF02>
</REF_3>
<SACLoop1>
<SAC>
<SAC01>C</SAC01>
<SAC02>H850</SAC02>
<SAC05>617</SAC05>
<SAC15>Sales Tax</SAC15>
<SAC16>EN</SAC16>
</SAC>
<TXI_2>
<TXI01>ST</TXI01>
<TXI02>6.17</TXI02>
</TXI_2>
</SACLoop1>
</IT1Loop1>
<TDS>
<TDS01>160500</TDS01>
</TDS>
<AMT>
<AMT01>1</AMT01>
<AMT02>1231</AMT02>
</AMT>
<AMT>
<AMT01>N</AMT01>
<AMT02>1605</AMT02>
</AMT>
<AMT>
<AMT01>BAP</AMT01>
<AMT02>1605</AMT02>
</AMT>
<SACLoop2>
<SAC_3>
<SAC01>C</SAC01>
<SAC02>G830</SAC02>
<SAC05>3000</SAC05>
</SAC_3>
</SACLoop2>
<SACLoop2>
<SAC_3>
<SAC01>C</SAC01>
<SAC02>H850</SAC02>
<SAC05>34400</SAC05>
<SAC15>Total Tax</SAC15>
<SAC16>EN</SAC16>
</SAC_3>
<TXI_5>
<TXI01>ST</TXI01>
<TXI02>344</TXI02>
</TXI_5>
</SACLoop2>
<SE>
<SE01>53</SE01>
<SE02>0770</SE02>
</SE>
</X12_00401_810>

No comments:

Post a Comment