我写了一个UDF来解码SAP PI映射中的endcode base64文本。但是在解码xml标签后,打开和关闭标签都被替换为 > <
请看下面的代码截图。
public String Base64Decoder(String EncodedString, Container container) throws StreamTransformationException
{
//Variable to hold decoded string
String decodedString = null;
byte[] decodedBytes = DatatypeConverter.parseBase64Binary(EncodedString);
try{
//Convert base64 schema to byte array
return new String(decodedBytes,"UTF-8");
//Get the string of decoded byte array
}catch(Exception e) {
}
//Export decoded string
return decodedString;
}
解码后的输出。
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Log xmlns:ns0="http://world.com/pi/M/Log">
<Data><OUTPUT><item><VBELN>0180001027</VBELN><WADAT>00000000</WADAT><VSTEL>1000</VSTEL><KUNNR/><ITEM><YITEM><MATNR>000000000011000082</MATNR><LFIMG>1.0</LFIMG><MEINS>L</MEINS></YITEM></ITEM></item><item><VBELN>0180001233</VBELN><WADAT>00000000</WADAT><VSTEL>1000</VSTEL><KUNNR/><ITEM><YITEM><MATNR>000000000041000000</MATNR><LFIMG>10.0</LFIMG><MEINS>LM</MEINS></YITEM></ITEM></item></OUTPUT></Data>
</ns0:Log>
里面的数据 <Data>
标签是解码的文本。但正如你所看到的,它的所有标签都被替换了。例如,代替 <OUTPUT>
正在印刷 <OUTPUT>
请你告诉我,我应该在UDF中做哪些修改才能避免这种情况。
在Base64中编码的字符串。
PE9VVFBVVD48aXRlbT48VkJFTE4+MDE4MDAwMTAyNzwvVkJFTE4+PFdBREFUPjAwMDAwMDAwPC9XQURBVD48VlNURUw+MTAwMDwvVlNURUw+PEtVTk5SLz48SVRFTT48WUlURU0+PE1BVE5SPjAwMDAwMDAwMDAxMTAwMDA4MjwvTUFUTlI+PExGSU1HPjEuMDwvTEZJTUc+PE1FSU5TPkw8L01FSU5TPjwvWUlURU0+PC9JVEVNPjwvaXRlbT48aXRlbT48VkJFTE4+MDE4MDAwMTIzMzwvVkJFTE4+PFdBREFUPjAwMDAwMDAwPC9XQURBVD48VlNURUw+MTAwMDwvVlNURUw+PEtVTk5SLz48SVRFTT48WUlURU0+PE1BVE5SPjAwMDAwMDAwMDA0MTAwMDAwMDwvTUFUTlI+PExGSU1HPjEwLjA8L0xGSU1HPjxNRUlOUz5MTTwvTUVJTlM+PC9ZSVRFTT48L0lURU0+PC9pdGVtPjwvT1VUUFVUPg==
如果你说 <Data><OUTPUT><...
是不正确的,只因为 你看 <
而不是 <
在XML字符串内,那么这只是你的一个误解。
在XML中,原始字符 <
总是代表 <
.