Синтаксический анализ XML-тегов в Java из URL

#java #xml-parsing

#java #xml-синтаксический анализ

Вопрос:

Я пытаюсь извлечь содержимое из XML-тегов из URL-адреса, но мой int numberOfDetails имеет длину 0. Что я делаю не так?

//Отредактированный код

 public String[] dumpTitles(String[] xmlFiles) {


        String[] elementsArray = null;
        try { 
            URL xmlContent = new URL("http://webdev4.matcmadison.edu/mab/AmazonXML/georgeEliot.xml");
            DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = db.parse(new InputSource(xmlContent.openStream()));


            Toast.makeText(this, "xml file: "   xmlContent, 1000).show();

            NodeList detailsNodeList = doc.getElementsByTagName("Details");
            int numberOfDetails = detailsNodeList.getLength();
            String str = String.format("There are %d Details elements", numberOfDetails);
            Log.println(Log.DEBUG, TAG, str);
            Toast.makeText(this, "number of details: "   str, 1000).show();
            elementsArray = getElementByTagName("ProductName", numberOfDetails, detailsNodeList);
        }
        catch (Exception ex) {
            Log.println(Log.DEBUG, TAG, "XML Parsing failed: "   ex.getMessage());
        }

        return elementsArray;  

    }

  public String[] getElementByTagName(String detailTagName, int numberOfDetails, NodeList detailsNodeList) throws Exception {
      String[] elementsArray = null;
      ArrayList<String> elementsArrayList = new ArrayList<String>();
      Toast.makeText(this, "TEST2", 1000).show();
        for (int k = 0; k < numberOfDetails; k  ) {
            Toast.makeText(this, "TEST3", 1000).show();
            Element nDetails = (Element)detailsNodeList.item(k);
            NodeList elementNodeList = ((Document) nDetails).getElementsByTagName(detailTagName);
            Node nodeName = elementNodeList.item(k);
            String nodeString = String.format("%s", nodeName);
            elementsArrayList.add(nodeString);
            elementsArray = elementsArrayList.toArray(elementsArray);
            Log.println(Log.DEBUG, TAG, nodeString);
            Toast.makeText(this, "TEST4", 1000).show();
            Toast.makeText(this, "ELEMENT"   elementsArray[0], 1000).show();

        }

        return elementsArray;
}
  

// Исходный код
Строка xmlContent = «http://webdev4.matcmadison.edu/mab/AmazonXML/georgeEliot.xml «;
Log.println(Log.DEBUG, ТЕГ, «ИМЯ ФАЙЛА: » xmlContent);
String[] elementsArray = null;
попробуйте {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Toast.makeText(это, «xml-файл: » xmlContent, 1000).show();
Document doc = db.parse(новый входной источник (новый StringReader(xmlContent)));
Список узлов detailsNodeList = doc.getElementsByTagName(«Подробности»);
int numberOfDetails = detailsNodeList.getLength();

Ответ №1:

Вы не должны использовать StringReader для чтения из URL. StringReader читает строку, переданную вами в конструкторе, она не загружает файл из Интернета. Вместо этого вы можете использовать URL class:

 URL xmlContent = new URL("http://webdev4.matcmadison.edu/mab/AmazonXML/georgeEliot.xml");
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new InputSource(xmlContent.openStream()));
  

Другой способ:

Вы можете использовать конструктор, InputSource который принимает String :

 String pathToDocument = "http://webdev4.matcmadison.edu/mab/AmazonXML/georgeEliot.xml";
Document doc = db.parse(new InputSource(pathToDocument));
  

Комментарии:

1. Спасибо, это сработало. Не могли бы вы, пожалуйста, помочь извлечь содержимое элемента в массив