我有一个XML文件,我试图使用Java进行搜索。我需要通过其attribut值(端口号)找到一个元素,并返回该元素的依赖描述。
已知端口的xml文件应在线托管,并具有以下架构:
<ports>
<record>
<number></number>
<name></name>
<protocol></protocol>
<description></description>
</record>
<record>
<number></number>
<name></name>
<protocol></protocol>
<description></description>
</record>
<record>
<number></number>
<name></name>
<protocol></protocol>
<description></description>
</record>
<record>
<number></number>
<name></name>
<protocol></protocol>
<description></description>
</record>
</ports>
元素没有唯一标识符。在我的应用程序中,我想调用一个带有数字作为参数的函数,并且它应该给出具有给定属性“number”的项目的描述。
我的问题是,它是所有已知端口的列表,我无法手动编辑结构,以使用portnumber作为属性分配所有元素。任何人都可以告诉我如何解决这个问题吗?
提前致谢
更新:我想像get_port(int portno)
一样搜索它。这就是我的代码:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DOMExampleJava {
public static void main(String args[]) {
try {
File input = new File("input.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(input);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("record");
System.out.println("==========================");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Port number: " + getValue("number", element));
System.out.println("Protocol: " + getValue("protocol", element));
System.out.println("Description: " + getValue("description", element));
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static String getValue(String tag, Element element) {
NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodes.item(0);
return node.getNodeValue();
}
}
答案 0 :(得分:1)
在方法中创建自己的HashMap obj,您可以从列表中获取所需的记录。例如。 HashMap<int itemId, List<item>> yourOwnItem = new HashMap<>();
在for循环结束时,将项目传递给yourOwItem,如下所示:
yourOwnItem.put(i , List<item>);