文档解析显示为null

时间:2013-12-17 14:53:38

标签: java xml null

我需要以下概念的帮助。

我想在代码中获取xref节点的属性。即id及其值,位置及其值,类型和价值。 我将xml作为字符串传递。但该文档在解析时显示为null。

请帮助我。

import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;



public class GetAtrribute {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String xml = "<xref id=\"19703675\" location=\"abstract\" type=\"external\">PubMed Abstract: http://www.abcd.nlm.nih.gov/...</xref>"; //Populated XML String....
        GetAtrribute ga = new GetAtrribute();
        try {
            ga.getValues(xml);
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    public String getValues(String xmlStr) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + xmlStr;
        try {
            builder = factory.newDocumentBuilder();
            Document document = builder.parse(new InputSource(new StringReader(
                    xmlStr)));
            Element element = document.getDocumentElement();

            NodeList list = element.getElementsByTagName("xref");
            if (list != null && list.getLength() > 0) {
                NodeList subList = list.item(0).getChildNodes();

                if (subList != null && subList.getLength() > 0) {
                    return subList.item(0).getNodeValue();
                }
                for (int count = 0; count < subList.getLength(); count++) {
                    System.out.println(subList.item(count).getNodeValue());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return xmlStr;

    }

}

2 个答案:

答案 0 :(得分:0)

问题在于,当您运行此行时:

Element element = document.getDocumentElement();

你实际上已经选择了外部参照,因为它是唯一的xml元素。您可以在外部参照周围包裹另一个对象,或者只使用变量'element'来获取详细信息。

P.S。您的班级名称拼写错误:GetAtrribute - &gt;的getAttribute

答案 1 :(得分:0)

我建议您使用XPath在XML中查找数据:

XPath xPath = XPathFactory.newInstance().newXPath();
Document baseDoc;
try (InputStream pStm = new ByteArrayInputStream(baseXmlString.getBytes("utf-8"))) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    baseDoc = builder.parse(pStm);
} catch (SAXException | IOException | ParserConfigurationException ex) {
    getLogger().error(null, ex);
    return null;
}
try {
    XPathExpression expression = xPath.compile(xPathExpression);
    return (T) expression.evaluate(baseDoc, pathType);
} catch (XPathExpressionException ex) {
    getLogger().error(null, ex);
}
return null;

例如,请查看here