Невозможно выполнить запросы Xpath из JAVA в файлах XML с тегом <DOCTYPE> - PullRequest
3 голосов
/ 25 января 2011

Я сделал следующий метод, который выполняет жестко запрограммированные запросы xPath в жестко запрограммированном XML-файле. Метод отлично работает с одним исключением. Некоторые XML-файлы содержат следующий тег

           <!DOCTYPE WorkFlowDefinition SYSTEM "wfdef4.dtd"> 

Когда я пытаюсь выполнить запрос в этом файле, я получаю следующее исключение:

     java.io.FileNotFoundException: 
     C:\ProgramFiles\code\other\xPath\wfdef4.dtd(The system cannot find the file specified). 

Вопрос: Что я могу сделать, чтобы моя программа не учитывала этот файл DTD? Я также отметил, что путь C: \ ProgramFiles \ code \ other \ xPath \ wfdef4.dtd - это тот, из которого запускается мое приложение, а не тот, в котором находится фактический xml-файл.

Спасибо за продвижение

Вот мой метод:

 public String evaluate(String expression,File file){
  XPathFactory factory = XPathFactory.newInstance();
  xPath = XPathFactory.newInstance().newXPath();
  StringBuffer strBuffer = new StringBuffer();
  try{
    InputSource inputSource = new InputSource(new FileInputStream(file));
                         //evaluates the expression
    NodeList nodeList = (NodeList)xPath.evaluate(expression, 
                   inputSource,XPathConstants.NODESET);

                         //does other stuff, irrelevant with my question.
    for (int i = 0 ; i <nodeList.getLength(); i++){
     strBuffer.append(nodeList.item(i).getTextContent());
    }
  }catch (Exception e) {
   e.printStackTrace();
  }
  return strBuffer.toString();
      }

1 Ответ

1 голос
/ 11 апреля 2011

И ответ:

    xPath = XPathFactory.newInstance().newXPath();
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    //add this line to ignore dth DTD
    dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
...