LuaXml在打印CDATA时,失效了,被转义了

   NgxLua过滤报文时,会使用到LuaXml解析报文体,获取解析报文xml对象 方便对报文信息的获取,有的时候,需要在原报文的基础上增加新的xml节点以满足项目需要,如果新添加的xml节点是 CDATA ,通过LuaXml添加的子节点,新的xml对象在序列化生成xml字符串的时候,会将 CDATA 关键字进行转义,例如下面的赋值语句,在生成xml字符串的时候会将报文CDATA转义,

"xDoc:find('soapenv:Envelope'):find('soapenv:Body'):find('chin:exchange'):find('chin:in0')[1] = '<![CDATA['..reqSvc..']]>'"

解决方法:

在LuaXml.lua文件的62行替换成下面的语句:

      local temp_str = base.string.match(var[1],"<!%[CDATA%[.*%]%]>$")
      if temp_str == nil then
        s = s..">"..encode(base.tostring(var[1])).."</"..tag..">\n"
      else
        s = s..">"..base.tostring(var[1]).."</"..tag..">\n"
      end

差分如图:



阅读更多

没有更多推荐了,返回首页