免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 不死草

[求教算法]对文件格式的检查(XML使用) [复制链接]

论坛徽章:
0
发表于 2008-08-06 09:55 |显示全部楼层

回复 #10 smonkey0 的帖子

哦,真的非常感谢smonkey0的热心回帖,我的目的可能阐述不够明确,那么我再试着解释一遍:
我所说的检查格式呢,就是查错,所谓的错误一般有几种情况,就拿1楼的帖子的例子来做介绍,
1、从第1行来看,我要辨别是不是“*****XYZ   110   ”;
2、不能移位,“XYZ”和“110”之间有三个空格,“110”后面还有2个空格,这个不能错;
3、那么再看line10 和 line20,
正如你所说的date那一部分可以:

  1. <level name="10" duplicated="append">
  2.                         <fields>
  3.                                 <field pos="15" length="6" datatype="date" action="+" align='R'/>
  4.                         </fields>
  5.                 </level>
复制代码

其实我的想法是想如果可能,我想写一个structure.
恩,下面我再列一个例子吧,我原先有一个structure的例子:

  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <translation>
  3.         <info>
  4.                 <FieldSeparator type="ascii">42</FieldSeparator>
  5.                 <SegmentSeparator type="ascii">10</SegmentSeparator>
  6.                 <RecordLevel pos="1" length="5"/>
  7.         </info>
  8.         <flat>
  9.                 <structure>
  10.                         <loop id="root" req="M" repeat="1">
  11.                                 <action type="output" segment="ISA"/>
  12.                                 <action type="output" segment="GS"/>
  13.                                 <loop id="message" req="M" repeat="10000">
  14.                                         <level id="*****" req="M" max="1"/>
  15.                                         <action type="clear" value="segmentcounter" notinclude="ISA;GS;ST;SE;GE;IEA"/>
  16.                                         <action type="output" segment="ST"/>
  17.                                         <level id="10" req="M" max="1"/>
  18.                                         <action type="output" segment="BIG"/>
  19.                                         <action type="output" segment="REF" id="IA"/>
  20.                                         <action type="output" segment="REF" id="PO"/>
  21.                                         <level id="20" req="M" max="1"/>
  22.                                         <action type="output" segment="N1" id="BY"/>
  23.                                         <action type="output" segment="N2" id="BY"/>
  24.                                         <action type="output" segment="N3" id="BY"/>
  25.                                         <action type="output" segment="N4" id="BY"/>
  26.                                         <level id="25" req="M" max="1"/>
  27.                                         <action type="output" segment="N1" id="ST"/>
  28.                                         <action type="output" segment="N2" id="ST"/>
  29.                                         <action type="output" segment="N3" id="ST"/>
  30.                                         <action type="output" segment="N4" id="ST"/>
  31.                                         <loop id="it1_loop" req="M" repeat="200000">
  32.                                                 <level id="30" req="M" max="1"/>
  33.                                                 <action type="output" segment="IT1"/>
  34.                                                 <loop id="pid_loop" req="O" repeat="1000">
  35.                                                         <level id="40" req="O" max="1"/>
  36.                                                         <action type="output" segment="PID"/>
  37.                                                 </loop>
  38.                                         </loop>
  39.                                         <level id="50" req="M" max="1"/>
  40.                                         <action type="output" segment="TDS"/>
  41.                                         <!--<level id="60" req="O" max="1"/>-->
  42.                                         <action type="output" segment="SAC"/>
  43.                                         <action type="output" segment="CTT"/>
  44.                                         <action type="output" segment="SE"/>
  45.                                         <action type="clear" value="transaction"/>
  46.                                 </loop>
  47.                                 <action type="output" segment="GE"/>
  48.                                 <action type="output" segment="IEA"/>
  49.                         </loop>
  50.                         <level id="end" req="O" max="1"/>
  51.                 </structure>
  52.                 <records>
  53.                         <record level="*****">
  54.                                 <field req="M" pos="6" length="6" name="vendorName">
  55.                                         <options>
  56.                                                 <option>CINTAS</option>
  57.                                         </options>
  58.                                 </field>
  59.                                 <field req="M" pos="12" length="6" name="ediVersion">
  60.                                         <options>
  61.                                                 <option>810</option>
  62.                                         </options>
  63.                                 </field>
  64.                         </record>
  65.                         <record        level="10">
  66.                                 <field req="M" pos="6" length="8" name="invoiceDate">
  67.                                         <validation>
  68.                                                 <function name="checkDateRange">
  69.                                                         <param name="date">[this]</param>
  70.                                                         <param name="format">YYYYMMDD</param>
  71.                                                         <errors>
  72.                                                                 <error return="-1">Invalid Invoice Date: [this]</error>
  73.                                                         </errors>
  74.                                                 </function>
  75.                                         </validation>
  76.                                 </field>
  77.                                 <field req="M" pos="14" length="22" name="invoiceNumber"/>
  78.                                 <field req="O" pos="36" length="8" name="purchaseOrderDate">
  79.                                         <validation>
  80.                                                 <function name="checkDateRange">
  81.                                                         <param name="date">[this]</param>
  82.                                                         <param name="format">YYYYMMDD</param>
  83.                                                         <errors>
  84.                                                                 <error return="-1">Invalid Purchase Order Date: [this]</error>
  85.                                                         </errors>
  86.                                                 </function>
  87.                                         </validation>
  88.                                 </field>
  89.                                 <field req="O" pos="44" length="22" name="purchaseOrderNumber"/>
  90.                                 <field req="M" pos="66" length="30" name="vendorNumber"/>
  91.                                 <field req="O" pos="96" length="80" name="vendorNumberDescription"/>
  92.                                 <field req="M" pos="176" length="30" name="purchaseOrderType"/>
  93.                                 <field req="O" pos="206" length="80" name="purchaseOrderTypeDescription"/>
  94.                         </record>
  95.                         <record level="20">
  96.                                 <field req="M" pos="6" length="60" name="purchaserName"/>
  97.                                 <field req="M" pos="66" length="2" name="purchaserCodeQualifier"/>
  98.                                 <field req="M" pos="68" length="80" name="purchaserIdentitifcationCode">
  99.                                         <options>
  100.                                                 <option>004</option>
  101.                                                 <option>044</option>
  102.                                                 <option>067</option>
  103.                                                 <option>095</option>
  104.                                                 <option>128</option>
  105.                                                 <option>577</option>
  106.                                                 <option>897</option>
  107.                                                 <option>DS1</option>
  108.                                                 <option>974</option>
  109.                                                 <option>975</option>
  110.                                                 <option>976</option>
  111.                                         </options>
  112.                                 </field>
  113.                                 <field req="O" pos="148" length="60" name="purchaserNameDescription"/>
  114.                                 <field req="O" pos="208" length="55" name="purchaserAddress1"/>
  115.                                 <field req="O" pos="263" length="55" name="purchaserAddress2"/>
  116.                                 <field req="O" pos="318" length="30" name="purchaserCityName"/>
  117.                                 <field req="O" pos="348" length="2" name="purchaserStateCode"/>
  118.                                 <field req="O" pos="350" length="15" name="purchaserPostalCode"/>
  119.                                 <field req="O" pos="365" length="3" name="purchaserCountryCode"/>
  120.                         </record>
  121.                         <record level="25">
  122.                                 <field req="O" pos="6" length="60" name="shiptoName"/>
  123.                                 <field req="M" pos="66" length="2" name="shiptoCodeQualifier"/>
  124.                                 <field req="M" pos="68" length="80" name="shiptoIdentitifcationCode">
  125.                                         <options>
  126.                                                 <option>004</option>
  127.                                                 <option>044</option>
  128.                                                 <option>067</option>
  129.                                                 <option>095</option>
  130.                                                 <option>128</option>
  131.                                                 <option>577</option>
  132.                                                 <option>897</option>
  133.                                                 <option>DS1</option>
  134.                                                 <option>974</option>
  135.                                                 <option>975</option>
  136.                                                 <option>976</option>
  137.                                         </options>
  138.                                         <error type="options">Invalid Ship To Location Code: [this]</error>
  139.                                 </field>
  140.                                 <field req="O" pos="148" length="60" name="shiptoNameDescription"/>
  141.                                 <field req="O" pos="208" length="55" name="shiptoAddress1"/>
  142.                                 <field req="O" pos="263" length="55" name="shiptoAddress2"/>
  143.                                 <field req="O" pos="318" length="30" name="shiptoCityName"/>
  144.                                 <field req="O" pos="348" length="2" name="shiptoStateCode"/>
  145.                                 <field req="O" pos="350" length="15" name="shiptoPostalCode"/>
  146.                                 <field req="O" pos="365" length="3" name="shiptoCountryCode"/>
  147.                         </record>
  148.                         <record level="30">
  149.                                 <field req="M" pos="6" length="20" name="assignedID"/>
  150.                                 <field req="M" pos="26" length="10" name="quantityInvoiced"/>
  151.                                 <field req="M" pos="36" length="2" name="measurementCodeUnit">
  152.                                         <options>
  153.                                                 <option>EA</option>
  154.                                                 <option>PR</option>
  155.                                         </options>
  156.                                 </field>
  157.                                 <field req="M" pos="38" length="17" name="unitPrice"/>
  158.                                 <field req="M" pos="55" length="48" name="buyerItemNumber"/>
  159.                                 <field req="M" pos="103" length="48" name="vendorItemNumber"/>
  160.                                 <field req="O" pos="151" length="48" name="originCountryCode"/>
  161.                                 <field req="O" pos="199" length="48" name="procuredCountry"/>
  162.                         </record>
  163.                         <record level="40">
  164.                                 <field req="O" pos="6" length="80" name="itemDescription"/>
  165.                         </record>
  166.                         <record level="50">
  167.                                 <field req="M" pos="6" length="15" name="monetaryAmount1"/>
  168.                                 <!--<field req="O" pos="21" length="15" name="monetaryAmount2"/>-->
  169.                                 <!--<field req="O" pos="36" length="15" name="monetaryAmount3"/>-->
  170.                                 <!--<field req="O" pos="51" length="15" name="monetaryAmount4"/>-->
  171.                         </record>
  172.                         <!--
  173.                         <record level="60">
  174.                                 <field req="O" pos="6" length="15" name="freightAmountCharged"/>
  175.                         </record>
  176.                         -->
  177.                 </records>
  178.         </flat>
  179.         <edi>
  180.                 <segments>
  181.                         <segment name="ISA">
  182.                                 <field pos="1">00</field>
  183.                                 <field pos="2">          </field>
  184.                                 <field pos="3">00</field>
  185.                                 <field pos="4">          </field>
  186.                                 <field pos="5">12</field>
  187.                                 <field pos="6">85227386885    </field>
  188.                                 <field pos="7">12</field>
  189.                                 <field pos="8">7085632626     </field>
  190.                                 <field pos="9">
  191.                                         <function name="getDate">
  192.                                                 <param name="format">YYMMDD</param>
  193.                                                 <errors>
  194.                                                         <error return="-1">Incorrect type of date format</error>
  195.                                                 </errors>
  196.                                         </function>
  197.                                 </field>
  198.                                 <field pos="10">
  199.                                         <function name="getTime">
  200.                                                 <param name="format">HHmm</param>
  201.                                                 <errors>
  202.                                                         <error return="-1">Incorrect type of time format</error>
  203.                                                 </errors>
  204.                                         </function>
  205.                                 </field>
  206.                                 <field pos="11">U</field>
  207.                                 <field pos="12">00400</field>
  208.                                 <field pos="13">
  209.                                         <function name="getSerialNumber">
  210.                                                 <param name="filename">data\cintas810isa.seq</param>
  211.                                                 <param name="length">9</param>
  212.                                                 <param name="padding">0</param>
  213.                                                 <param name="adjust">1</param>
  214.                                                 <errors>
  215.                                                         <error return="-1">File not Found</error>
  216.                                                         <error return="-2">File content is not correct</error>
  217.                                                 </errors>
  218.                                         </function>
  219.                                 </field>
  220.                                 <field pos="14">0</field>
  221.                                 <field pos="15">P</field>
  222.                                 <field pos="16">&gt;</field>
  223.                         </segment>
  224.                         <segment name="GS">
  225.                                 <field pos="1">IN</field>
  226.                                 <field pos="2">85227386885</field>
  227.                                 <field pos="3">7085632626</field>
  228.                                 <field pos="4">
  229.                                         <function name="getDate">
  230.                                                 <param name="format">YYYYMMDD</param>
  231.                                         </function>
  232.                                 </field>
  233.                                 <field pos="5">
  234.                                         <function name="getTime">
  235.                                                 <param name="format">HHmmss</param>
  236.                                         </function>
  237.                                 </field>
  238.                                 <field pos="6">
  239.                                         <function name="getSerialNumber">
  240.                                                 <param name="filename">data\cintas810gs.seq</param>
  241.                                                 <param name="length">4</param>
  242.                                                 <param name="padding">0</param>
  243.                                                 <param name="adjust">1</param>
  244.                                                 <errors>
  245.                                                         <error return="-1">File not Found</error>
  246.                                                         <error return="-2">File content is not correct</error>
  247.                                                 </errors>
  248.                                         </function>
  249.                                 </field>
  250.                                 <field pos="7">X</field>
  251.                                 <field pos="8">004010</field>
  252.                         </segment>
  253.                         <segment name="ST">
  254.                                 <field pos="1">810</field>
  255.                                 <field pos="2">
  256.                                         <function name="getSerialNumber">
  257.                                                 <param name="filename">data\cintas810st.seq</param>
  258.                                                 <param name="length">4</param>
  259.                                                 <param name="padding">0</param>
  260.                                                 <param name="adjust">1</param>
  261.                                                 <errors>
  262.                                                         <error return="-1">File not Found</error>
  263.                                                         <error return="-2">File content is not correct</error>
  264.                                                 </errors>
  265.                                         </function>
  266.                                 </field>
  267.                         </segment>
  268.                         <segment name="BIG">
  269.                                 <field pos="1">[invoiceDate]</field>
  270.                                 <field pos="2">[invoiceNumber]</field>
  271.                                 <field pos="3">[purchaseOrderDate]</field>
  272.                                 <field pos="4">[purchaseOrderNumber]</field>
  273.                         </segment>
  274.                         <segment name="REF" id="IA">
  275.                                 <field pos="1">IA</field>
  276.                                 <field pos="2">[vendorNumber]</field>
  277.                                 <field pos="3">[vendorNumberDescription]</field>
  278.                         </segment>
  279.                         <segment name="REF" id="PO">
  280.                                 <field pos="1">PO</field>
  281.                                 <field pos="2">[purchaseOrderType]</field>
  282.                                 <field pos="3">[purchaseOrderTypeDescription]</field>
  283.                         </segment>
  284.                         <segment name="N1" id="BY">
  285.                                 <field pos="1">BY</field>
  286.                                 <field pos="2">[purchaserName]</field>
  287.                                 <field pos="3">[purchaserCodeQualifier]</field>
  288.                                 <field pos="4">[purchaserIdentitifcationCode]</field>
  289.                         </segment>
  290.                         <segment name="N2" id="BY">
  291.                                 <field pos="1">[purchaserNameDescription]</field>
  292.                         </segment>
  293.                         <segment name="N3" id="BY">
  294.                                 <field pos="1">[purchaserAddress1]</field>
  295.                                 <field pos="2">[purchaserAddress2]</field>
  296.                         </segment>
  297.                         <segment name="N4" id="BY">
  298.                                 <field pos="1">[purchaserCityName]</field>
  299.                                 <field pos="2">[purchaserStateCode]</field>
  300.                                 <field pos="3">[purchaserPostalCode]</field>
  301.                                 <field pos="4">[purchaserCountryCode]</field>
  302.                         </segment>
  303.                         <segment name="N1" id="ST">
  304.                                 <field pos="1">ST</field>
  305.                                 <field pos="2">[shiptoName]</field>
  306.                                 <field pos="3">[shiptoCodeQualifier]</field>
  307.                                 <field pos="4">[shiptoIdentitifcationCode]</field>
  308.                         </segment>
  309.                         <segment name="N2" id="ST">
  310.                                 <field pos="1">[shiptoNameDescription]</field>
  311.                         </segment>
  312.                         <segment name="N3" id="ST">
  313.                                 <field pos="1">[shiptoAddress1]</field>
  314.                                 <field pos="2">[shiptoAddress2]</field>
  315.                         </segment>
  316.                         <segment name="N4" id="ST">
  317.                                 <field pos="1">[shiptoCityName]</field>
  318.                                 <field pos="2">[shiptoStateCode]</field>
  319.                                 <field pos="3">[shiptoPostalCode]</field>
  320.                                 <field pos="4">[shiptoCountryCode]</field>
  321.                         </segment>
  322.                         <segment name="IT1">
  323.                                 <field pos="1">[assignedID]</field>
  324.                                 <field pos="2">[quantityInvoiced]</field>
  325.                                 <field pos="3">[measurementCodeUnit]</field>
  326.                                 <field pos="4">[unitPrice]</field>
  327.                                 <field pos="6">
  328.                                         <function name="ifexists">
  329.                                                 <param name="value">[buyerItemNumber]</param>
  330.                                                 <param name="true">IN</param>
  331.                                         </function>
  332.                                 </field>
  333.                                 <field pos="7">[buyerItemNumber]</field>
  334.                                 <field pos="8">
  335.                                         <function name="ifexists">
  336.                                                 <param name="value">[vendorItemNumber]</param>
  337.                                                 <param name="true">VN</param>
  338.                                         </function>
  339.                                 </field>
  340.                                 <field pos="9">[vendorItemNumber]</field>
  341.                                 <field pos="10">
  342.                                         <function name="ifexists">
  343.                                                 <param name="value">[originCountryCode]</param>
  344.                                                 <param name="true">CH</param>
  345.                                         </function>
  346.                                 </field>
  347.                                 <field pos="11">[originCountryCode]</field>
  348.                                 <field pos="12">
  349.                                         <function name="ifexists">
  350.                                                 <param name="value">[procuredCountry]</param>
  351.                                                 <param name="true">CZ</param>
  352.                                         </function>
  353.                                 </field>
  354.                                 <field pos="13">[procuredCountry]</field>
  355.                         </segment>
  356.                         <segment name="PID">
  357.                                 <field pos="1">
  358.                                         <function name="ifexists">
  359.                                                 <param name="value">[itemDescription]</param>
  360.                                                 <param name="true">F</param>
  361.                                         </function>
  362.                                 </field>
  363.                                 <field pos="5">[itemDescription]</field>
  364.                         </segment>
  365.                         <segment name="TDS">
  366.                                 <field pos="1">[monetaryAmount1]</field>
  367.                                 <field pos="2">[monetaryAmount2]</field>
  368.                                 <field pos="3">[monetaryAmount3]</field>
  369.                                 <field pos="4">[monetaryAmount4]</field>
  370.                         </segment>
  371.                         <segment name="SAC">
  372.                                 <field pos="1">
  373.                                         <function name="ifexists">
  374.                                                 <param name="value">[freightAmountCharged]</param>
  375.                                                 <param name="true">C</param>
  376.                                         </function>
  377.                                 </field>
  378.                                 <field pos="2">
  379.                                         <function name="ifexists">
  380.                                                 <param name="value">[freightAmountCharged]</param>
  381.                                                 <param name="true">D240</param>
  382.                                         </function>
  383.                                 </field>
  384.                                 <field pos="5">[freightAmountCharged]</field>
  385.                         </segment>
  386.                         <segment name="CTT">
  387.                                 <field pos="1">
  388.                                         <function name="getNumberOfSegment">
  389.                                                 <param name="segment">IT1</param>
  390.                                         </function>
  391.                                 </field>
  392.                         </segment>
  393.                         <segment name="SE">
  394.                                 <field pos="1">
  395.                                         <function name="getNumberOfSegment">
  396.                                                 <param name="notsegment">ISA;GS;ST;SE;GE;IEA</param>
  397.                                                 <param name="adjust">2</param>
  398.                                         </function>
  399.                                 </field>
  400.                                 <field pos="2">[ST02]</field>
  401.                         </segment>
  402.                         <segment name="GE">
  403.                                 <field pos="1">
  404.                                         <function name="getNumberOfSegment">
  405.                                                 <param name="segment">ST</param>
  406.                                         </function>
  407.                                 </field>
  408.                                 <field pos="2">[GS06]</field>
  409.                         </segment>
  410.                         <segment name="IEA">
  411.                                 <field pos="1">
  412.                                         <function name="getNumberOfSegment">
  413.                                                 <param name="segment">GS</param>
  414.                                         </function>
  415.                                 </field>
  416.                                 <field pos="2">[ISA13]</field>
  417.                         </segment>
  418.                 </segments>
  419.         </edi>
  420. </translation>
复制代码

论坛徽章:
0
发表于 2008-08-06 10:00 |显示全部楼层
下面是RAW Data:

  1. *****CINTAS810
  2. 10   20080618TTS-G-6889C-1680781   200806031680781               1230                                                                                                          OS                                                                                                            
  3. 20   CMP 1 Div 100 - Cintas Logisitics                           92095                                                                                                                                         6800 Cintas Boulevard                                                                                         Mason                         OH45040          US
  4. 25   Grayson Distribution Center                                 92128                                                                                                                                         636 East Park Drive                                                                                           Grayson                       KY41143          US
  5. 30   001                          3EA10.85            06652814LJ014SS                                 66528-14 LJ014SS                                CHINA                                           China                                          
  6. 40                                                                                   
  7. 50              3255
复制代码

下面是EDI File的内容(就是通过XML转出来之后的内容)这个内容和上面的内容不一定是匹配的,我只是介绍格式。

  1. ISA*00*          *00*          *12*86327386885    *12*7085632626     *080620*2014*U*00400*000000941*0*P*>
  2. GS*IN*86327386885*7085632626*20080620*201432*0941*X*004010
  3. ST*810*0967
  4. BIG*20080618*TTS-G-6889C-1680781*20080603*1680781
  5. REF*IA*1230
  6. REF*PO*OS
  7. N1*BY*CMP 1 Div 100 - Cintas Logisitics*92*095
  8. N3*6800 Cintas Boulevard
  9. N4*Mason*OH*45040*US
  10. N1*ST*Grayson Distribution Center*92*128
  11. N3*636 East Park Drive
  12. N4*Grayson*KY*41143*US
  13. IT1*001*3*EA*10.85**IN*06652814LJ014SS*VN*66528-14 LJ014SS*CH*CHINA*CZ*China
  14. TDS*3255
  15. CTT*1
  16. SE*14*0967
  17. GE*1*0941
  18. IEA*1*000000941
复制代码

想研究此数据的朋友可以直接下载附件:

[ 本帖最后由 不死草 于 2008-8-6 10:09 编辑 ]

810.rar

2.91 KB, 下载次数: 12

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP