Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sax神秘_Java_Xml Parsing_Sax - Fatal编程技术网

Java Sax神秘

Java Sax神秘,java,xml-parsing,sax,Java,Xml Parsing,Sax,我有以下xml: 1. xxx 14385 ??µ?t???? Ga????? A. 15/03/1984 G??p? 德蓬 xxxxx xxxxx xxxx xxxxx - A??e? ?a?t?eµ???? E - - 我正试图用以下代码搜索它: try { NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); for(int i =0;i<nl.getLength();i++) {

我有以下xml:


1.
xxx
14385
??µ?t????
Ga?????
A.
15/03/1984
G??p?
德蓬
xxxxx
xxxxx
xxxx
xxxxx
-
A??e?
?a?t?eµ????
E
-
-
我正试图用以下代码搜索它:

try {
    NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
    for(int i =0;i<nl.getLength();i++) {
        Node n = nl.item(i); 
        pw.println("<tr><td colspan=\"2\"><h2>Στοιχεία ασθενή</h2></td></tr>");
        for(int j=1;j<=9;j=j+1){
            pw.println("<tr>");
            pw.println("<td>"+ellhnika[j]+"</td>");
            pw.println("<td>"+n.getParentNode().getParentNode().getParentNode().getChildNodes().item(1).getChildNodes().item(j).getTextContent()+"</td>");
            pw.println("</tr>");
        }
        pw.println("<tr><td colspan=\"2\"><h2>Στοιχεία επικοινωνίας</h2></td></tr>");
        for(int j=10;j<=15;j++){
            pw.println("<tr>");
            pw.println("<td>"+ellhnika[j]+"</td>");
            pw.println("<td>"+n.getParentNode().getParentNode().getParentNode().getChildNodes().item(1).getChildNodes().item(j).getTextContent()+"</td>");
            pw.println("</tr>");  
        }
        pw.println("<tr><td colspan=\"2\"><h2>Λοιπά στοιχεία</h2></td></tr>");
        for(int j=16; j<=19;j++){
            pw.println("<tr>");
            pw.println("<td>"+ellhnika[j]+"</td>");
            pw.println("<td>"+n.getNodeName()+"</td>");
            pw.println("</tr>");
        } 
    }
    pw.println("</table></body></html>");
} catch (XPathExpressionException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
返回一个空值


任何帮助都是有用的

请仔细观察您的程序输出。你会注意到两件事:

  • 你似乎对偶数行(不是奇数行)有问题
  • 未跳过您的子节点(第二个节点显示在第三位)
org.w3c.dom.Document
从来都不适合Java编程访问。也许,这就是为什么我们有像JDOM这样的API来简化XML数据访问。其中一个特点是,文本内容本身是一个独立的
节点
,并且它还包括空格

因此,虽然您似乎认为只有9个子节点(通过
for
循环条件可以明显看出),但实际上有18个子节点,其中包括文本节点,它们表示您实际感兴趣打印的其他节点之间的空白

因此,按如下方式打印文本节点

// fetch your child nodes just ONCE; outside the loop
NodeList childNodes = n.getParentNode().getParentNode().getParentNode()
                      .getChildNodes().item(1).getChildNodes();

// iterate over the complete list; DON'T hardcode the num of children here
for (int j = 0; j < childNodes.getLength(); j++) {
    String textContent = null;

    // trim to eliminate whitespace nodes
    if (!(textContent = childNodes.item(j).getTextContent().trim()).isEmpty()) {
        System.out.println("<tr>");
        System.out.println("<td>" + ellhnika[j] + "</td>");
        System.out.println("<td>" + textContent + "</td>");
        System.out.println("</tr>");
    }
}
//只取一次子节点;圈外
NodeList childNodes=n.getParentNode().getParentNode().getParentNode()
.getChildNodes().item(1).getChildNodes();
//反复浏览完整的列表;不要在这里硬编码孩子的数量
对于(int j=0;j

对其余循环也要这样做。

请不要将大量代码转储到堆栈溢出中。相反,请投入一些精力将其简化为最简单的测试用例。@OliCharlesworth我的朋友,我不知道错误在哪里,只向您显示最简单的测试用例。。您能帮我吗?然后从逐步简化输入数据和逐步简化代码逻辑开始。继续,直到你有15行代码,然后重新发布。你试过使用调试器吗?这不是调试服务。如果除了你之外没有人对我们的答案感兴趣,你的问题不适合这个网站。
// fetch your child nodes just ONCE; outside the loop
NodeList childNodes = n.getParentNode().getParentNode().getParentNode()
                      .getChildNodes().item(1).getChildNodes();

// iterate over the complete list; DON'T hardcode the num of children here
for (int j = 0; j < childNodes.getLength(); j++) {
    String textContent = null;

    // trim to eliminate whitespace nodes
    if (!(textContent = childNodes.item(j).getTextContent().trim()).isEmpty()) {
        System.out.println("<tr>");
        System.out.println("<td>" + ellhnika[j] + "</td>");
        System.out.println("<td>" + textContent + "</td>");
        System.out.println("</tr>");
    }
}