我目前正在尝试编写对IDTech加密pinpad /读卡器(HIDUSB设备)的支持。在输入(刷卡或键控)时,设备以XML格式发送响应,如下所示:
<DvcMsg Ver="1.1"><Dvc App="SecureKey Demo Software" AppVer="1.0" DvcType="M130-IDTECH" DvcSN="54114600381" Entry="SWIPE"></Dvc><Card CEncode="0" ETrk1="ýÚ‹çMŒ·¯×Õ³a+.7ãN2†ÖcƒTWïX¿6`Eåq1Bk_–Ø‚ÑM€œœåê`S" ETrk2="ÓÙ|•QΊkÄn`å ¤óhîõRÐ3ÌЀ{Rs¤Ì7MX¯nw" CDataKSN="P&ƒµ" Exp="0512" MskPAN="4444******4444" CHolder="PAYMENTECH" EFormat="4"></Card><Addr></Addr><Tran TranType="CREDIT"></Tran></DvcMsg>
我意识到ETrk1,ETrk2和CDataKSN属性中的加密信息包含无效字符,这些字符会阻止任何XML解析器跟踪。是否有办法使用不同的字符编码来生成每个字符的十六进制等效项,以便可以解析XML,或者我是否需要首先操作XML字符串来实现它?
答案 0 :(得分:0)
您可以通过查找非法字符并将其替换为字符代码(&amp; #xxxx)来预处理字符串。我担心加密的blob有一天会包含一个接近的报价。如果这是可能的话,我看不到编写自己的解析器的方法。
另一种方法是根本不将它视为XML,只需将其视为带有插入变量部分的大多数固定文本。因此,要么运行正则表达式,要么如果字段是固定长度,您甚至可以只进行SubString调用。如果格式改变,这显然更容易破裂。