有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java解析包含超链接的xml字符串

我使用DOM解析XML字符串,如下例所示。除了一个例子外,这非常有效。我试图解析的文档如下所示:

<response requestID=\"1234\">
    <expectedValue>Alarm</expectedValue>
    <recommendations>For steps on how to resolve visit <a href=\"some website\">Website</a> and use the search features for \"Alarm\"<recommendations>
    <setting>Active</setting>
<response>

我用于解析XML的代码如下所示:

try {   
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xmlResult));

        Document doc = db.parse(is);
        NodeList nlResponse = doc.getElementsByTagName("response");

        String[] String = new String[3];  //result entries

        for (int i = 0; i < nlResponse.getLength(); i++) {
            Element e = (Element) nlResponse.item(i);
            int c1 = 0; //count for string array

            NodeList ev = e.getElementsByTagName("expectedValue");
            Element line = (Element) ev.item(0);
            String[c1] = (getCharacterDataFromElement(line));
            c1++;

            NodeList rec = e.getElementsByTagName("recommendations");
            line = (Element) rec.item(0);
            String[c1] = (getCharacterDataFromElement(line));
            c1++;

            NodeList set = e.getElementsByTagName("settings");
            line = (Element) set.item(0);
            String[c1] = (getCharacterDataFromElement(line));
            c1++;  

我能够解析代码并将结果放入字符串数组(与System.out.println()相反)。使用当前代码,我的字符串数组如下所示:

String[0] = "Alarm"
String[1] = "For steps on how to resolve visit"
String[2] = "Active"

我希望能够以某种方式阅读“推荐”中的其余信息,以便最终在文本视图中显示超链接(以及其他输出)。我该怎么做


共 (1) 个答案

  1. # 1 楼答案

    很抱歉,我之前的回答假设您的xml格式不正确

    我认为现在发生的情况是,对getCharacterDataFromElement的调用只是查看第一个子节点的文本,而它需要查看所有子节点,并在查看推荐节点时获取href属性以及第二个子节点的文本

    例如,在获得推荐元素后

                String srec = "";
                NodeList nl = line.getChildNodes();
                srec += nl.item(0).getTextContent();
    
                Node n = nl.item(1);
                NamedNodeMap nm = n.getAttributes();
                srec += "<a href=\"" + nm.getNamedItem("href").getTextContent() +  "\">" + n.getTextContent() + "</a>";
    
                srec += nl.item(2).getTextContent();
    
                String[c1] = srec;