Java 如何使此功能更短/性能更好

Java 如何使此功能更短/性能更好,java,xml,Java,Xml,一个简短的问题:如何使此函数更短或更高性能: private String getOCC_Name(Document doc) { String occ_name = ""; NodeList nl = doc.getElementsByTagName("Occurrence"); for (int x = 0; x < nl.getLength(); x++) { Element e = (Element) nl.item(x);

一个简短的问题:如何使此函数更短或更高性能:

private String getOCC_Name(Document doc) {
    String occ_name = "";
    NodeList nl = doc.getElementsByTagName("Occurrence");
    for (int x = 0; x < nl.getLength(); x++) {
        Element e = (Element) nl.item(x);
        if (checkId(e, this.getPrimaryOccurenceRef().getId() /* = id7*/)) {
            String instancedRef = e.getAttributes().getNamedItem("instancedRef").getNodeValue().replace("#", "");
            NodeList pr = doc.getElementsByTagName("ProductRevision");
            for (int p = 0; p < pr.getLength(); p++) {
                Element pre = (Element) pr.item(p);
                if (checkId(pre, instancedRef)) {
                    String DatasetId = pre.getElementsByTagName("AssociatedDataSet").item(0).getAttributes().getNamedItem("dataSetRef").getNodeValue().replace("#", "");
                    NodeList ds = doc.getElementsByTagName("DataSet");
                    for (int dsi = 0; dsi < ds.getLength(); dsi++) {
                        if (checkId((Element) ds.item(dsi), DatasetId)) {
                            String[] memberRefs = ds.item(dsi).getAttributes().getNamedItem("memberRefs").getNodeValue().replace("#", "").split(" ");
                            NodeList efs = doc.getElementsByTagName("ExternalFile");
                            for (int efl = 0; efl < efs.getLength(); efl++) {
                                for (String m : memberRefs) {
                                    if (checkId((Element) efs.item(efl), m) && efs.item(efl).getAttributes().getNamedItem("format").getNodeValue().equalsIgnoreCase("asm")) {
                                        occ_name = efs.item(efl).getAttributes().getNamedItem("locationRef").getNodeValue().split("\\\\")[1];
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return occ_name;
}
private Boolean checkId(Element e, String toCheck) {
    if (e.getAttributes().getNamedItem("id").getNodeValue().equalsIgnoreCase(toCheck)) {
        return true;
    }
    return false;
}
私有字符串getOCC\u名称(文档文档){
字符串occ_name=“”;
NodeList nl=doc.getElementsByTagName(“事件”);
对于(int x=0;x
我需要通过以下方式获得我想要的字符串:

主要事件(参考“id7”)->instancedRefs->

Productrevision(引用instancedRefs)->associatedDataSet->

数据集(引用关联的数据集)->memberRefs->

外部文件(参考MemberRef)->locationRef

编辑:


我的问题与标记的副本无关…

Q:如何使此函数更短/更高性能

答:使用XPath查询查找要查找的节点,而不是遍历整个树:

以下是一些教程:


从阅读干净的代码开始。并检查单层抽象原则。