需求妹子在版本验证的时候,发现前台展示与真实的结果不一致。遂进行了比对产看,产生异常结果的xml报文:
<Group Name='"Basic Service"'>
<Group>
<TS>TS11</TS>
</Group>
</Group>
正常解析的xml报文
<Group Name ="Basic Service" >
<Group Name ="TSCODE:" >
<TS>Telephony (TS11)</TS>
</Group>
我配置的解析规则是Group节点下面有TS11,并且对Group节点的name属性做判断
public static String processVoice(String queryResult) throws DocumentException{
Document document = DocumentHelper.parseText(queryResult);
Node groupNode = document.selectSingleNode("//Group[@Name='Basic Service' or @Name='"Basic Service"']");
if (groupNode == null) {
return null;
}
boolean isMatch = groupNode.selectSingleNode("//TS[contains(text(),'TS11')]") != null;
return isMatch ? TRUE : null;
}
经过验证发现异常报文的group节点做匹配的时候就空了,所以没有匹配成功。验证了好多最后发现是'"'这个字符串的问题,xml中对一些特殊字符做了转义,'"'就是双引号"的预定转义字符。所以把解析规则做了一下调整,就可以了。
Node groupNode = document.selectSingleNode("//Group[@Name='Basic Service' or @Name='\"Basic Service\"']");
附查到的xml转义字符表: