0

我在存储使用 DOM 构建并使用 xpath 查询的字符串时遇到问题。这是我在代码GoogleSample中使用的一些参考

public static String getRoute() throws Exception {
    String xPathString = "//text() ";
    String nodeString = "";
    String notags = null;

    XPathFactory factory = XPathFactory.newInstance();

    XPath xpath = factory.newXPath();

//URL and HTTP connection here



InputStream inputXml = connection.getInputStream();
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(inputXml);

            NodeList nodes = (NodeList) xpath.evaluate(xPathString, doc, XPathConstants.NODESET);

            for (int i = 0, n = nodes.getLength(); i < n; i++) {

                nodeString = nodes.item(i).getTextContent();
                notags = nodeString.replaceAll("<[^>]*>", "");
                System.out.print(notags + "\n");

            } 
        } catch (XPathExpressionException ex) {
            System.out.print("XPath Error");
        }

        return notags;

该代码似乎System.out.print(notags + "\n");在 try 和 catch 块中打印出来,但是当我尝试获取该方法并使用以下方法进行系统打印输出时:

public static void main (String[] args) {
     try {
      System.out.println(getRoute());  
    } catch (Exception e) {
        System.out.println(e);
    }
 }

我只能得到输出的最后一行而不是整个字符串。

4

1 回答 1

2

正如我所怀疑的,在这一行中:

notags = nodeString.replaceAll("<[^>]*>", "");

notags您在循环的每次迭代中都完全覆盖。你需要这样做:

notags += nodeString.replaceAll("<[^>]*>", "");

要在每行之间添加换行符,您可以这样做:

notags += nodeString.replaceAll("<[^>]*>", "") + "\n";

为了使其中任何一个起作用,您还需要更改此设置:

String notags = null;

对此:

String notags = "";

您确定 replaceAll() 是必要的吗?我希望 nodeString 已经没有任何<s 或>s,因为您正在选择文本节点。

于 2013-01-10T15:14:32.863 回答