大家好:
  现在我想解析一个xml,xml格式如
   <?xml version="1.0" encoding="UTF-8"?>
   <form:Documents xmlns:form="http://www.abbyy.com/FlexiCapture/Schemas/Export/FormData.xsd"    xmlns:addData="http://www.abbyy.com/FlexiCapture/Schemas/Export/AdditionalFormData.xsd">
      <_个险:_个险  addData:DocumentState="带有规则错误" addData:ImagePath="1601_1_1.jpg;1601_1_2.jpg;1601_1_3.jpg;1601_1_4.jpg" xmlns:_个险="http://www.abbyy.com/FlexiCapture/Schemas/Export/个险.xsd">
       <_文档节段_1>
          <_InsuredcltSex>M</_InsuredcltSex>
<_Insuredmarried>0</_Insuredmarried>
        </_文档节段_1>
      </_个险:_个险 >
    <form:Documents>
以上是xml的格式
   SAXReader reader = new SAXReader();
InputStream in = null;
in = new BufferedInputStream(new FileInputStream(file));
Document doc = reader.read(in);//读取XML数据
Iterator itRoot = doc.selectNodes("/form:Documents/_个险:_个险/_文档节段_1").iterator();
现在我用上面的方式进行解析,但是就是找不到 _文档节段_1这个节点,如果我把_个险:_个险这个节点的:去掉,就可以找到
不知道是什么原因,希望大家可以帮我一下,怎么才能找到相应的节点,谢谢

解决方案 »

  1.   

    转义:Iterator itRoot = doc.selectNodes("/form:Documents/_个险\\:_个险/_文档节段_1").iterator();
      

  2.   

    LZ应该使用统一的prefix,即将 <_个险:_个险> 改为<form:_个险>
    祝LZ通过!
      

  3.   

    抄来的,但愿有用:
    因为xml文档中没有Carrier这个namespace的声明  
      改成下面这样的形式就ok了  
      <?xml   version="1.0"?>  
      <Carrier:Response   xmlns:Carrier="myNameSpace">  
      <ReqId>555534756255551</ReqId>  
      <ReturnCode>0</ReturnCode>  
      <ReturnMessage>SUCCESS</ReturnMessage>  
      </Carrier:Response>
      

  4.   

    或者可以用xsd文件定义它的结构