java - 在 Java 中从 URL 解析 XML 标记名

标签 java xml-parsing

我试图从 url 的 xml 标记名中检索内容,但我的 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, TAG, "文件名:"+ xmlContent); String[] elementsArray = null; 尝试 { DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Toast.makeText(this, "xml 文件:"+ xmlContent, 1000).show(); 文档 doc = db.parse(new InputSource(new StringReader(xmlContent))); NodeList 详细信息NodeList = doc.getElementsByTagName("详细信息"); int numberOfDetails = detailsNodeList.getLength();

最佳答案

您不应该使用StringReader从url读取。 StringReader 读取您在构造函数中传递的字符串,它不会从网络下载文件。您可以使用 URL 类来代替:

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()));

另一种方式:

您可以使用constructorInputSource,它采用String:

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

关于java - 在 Java 中从 URL 解析 XML 标记名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8021428/

相关文章:

java - JAXB - 父类中的 Xml 注释仅在子类中设置特定字段

android - 在 Android 中解析 SD 卡

java - 如何减去 2 个 java.sql.Date 日期?

java - 使用 Jersey deps 将应用程序打包到 jar 中时出现问题

java - 使用 split 解析分隔文本文件

java - 如何修复错误 "org.xml.sax.SAXParseException/Content is not allowed in prolog"?

java - 调用一个重载的方法,其中所有参数都实现相同的接口(interface)

java - JPA 映射模型返回带有复合键的空元素

groovy - 使用 Groovy 中的命名空间正确迭代 XML

sql - 遍历 XML 节点并在 SQL Server 中发送电子邮件