本帖最后由 chikk 于 2012-09-12 17:44:39 编辑

解决方案 »

  1.   

    先将</单位(部门)>中的部门去掉,看是否可以,如果可以就说明不识别()或需要转译字符。
      

  2.   

    好像XML的命名规则就是这么规定的,没有好的办法
      

  3.   

    我的想法是将"()"用别的字符替换,我试了下用字母、数字、汉字都行,用符号就不行了。然后根据你替换后的节点名去解析
    String xml = "";
    xml += "<TBLDATA>";
    xml += "<姓名>张三</姓名><单位(部门)>ss</单位(部门)>";
    xml += "</TBLDATA>";
    //将“(”替换成left
    xml = xml.replace("(", "left");
     //将“)”替换成right
    xml = xml.replace(")", "right");
    System.out.println(xml+","+xml.indexOf("("));
    try {
    Document dom=DocumentHelper.parseText(xml);
    System.out.println(dom.getRootElement().elementTextTrim("单位left部门right"));
    } catch (Exception e) {
    e.printStackTrace();
    }
      

  4.   

    帅哥,看了篇你的文章“[DOM4J]关于XML报文子节点包含中文符号 "()"”
    我有个和你类似的问题,我要解析一段报文,格式如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    <业务(所属)>BZ(001)032</业务(所属)>
    <业务相关编号>BP NO. GDBGZGFBP1100391</业务相关编号>
    </root>
    问题:如果节点中有圆括号的话则会导致无法解析(“(所属)”),
    现在的思路是用正则表达式将节点(标签)中的圆括号以及圆括号中的内容去掉。
    PS:要保证节点对应的值中的圆括号以及括号中的内容不被去掉(“(001)”)。请问,这个正则表达式怎么写啊?