一个简单的问题:如何使这个功能更短或更高效:
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;
}
我需要按照以下方式获取我想要的字符串:
primaryOccurrence(参考“id7”) - &gt; instancedRefs - &gt;
Productrevision(参考instancedRefs) - &gt; associatedDataSet - &gt;
数据集(引用associatedDataSet) - &gt; memberRefs - &gt;
ExternalFile(参考memberRefs) - &gt;的 locationRef
编辑:
我的问题与标记的副本无关......
答案 0 :(得分:0)
答:使用XPath查询来查找您正在寻找的节点,而不是遍历整个树:
以下是一些教程: