我们有一个目录,可以将搜索结果作为XML文档返回。
<directory.person>
<person netid="" pidm="" student="" affiliate="">
<picture>no</picture>
<name>...</name>
</person>
我正在尝试使用以下代码解析并在java中读取它:
try{
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
Document doc = db.parse(is);
NodeList nodes = doc.getElementsByTagName("person");
for(int i = 0;i < nodes.getLength(); i++){
Element element = (Element) nodes.item(i);
NodeList pidm = element.getElementsByTagName("@pidm");
Element line = (Element)pidm.item(0);
value = getCharacterDataFromElement(line);
if(value.compareTo("Dana")==0 || value=="Dana")
out.println(value);
}
}
catch(Exception e){
out.println(e);
}
我遇到的问题是在我的“for”循环的第二行实际访问该pidm变量。我不知道该怎么做。基本上,我需要通过pidm输出,因为这是每个人返回的唯一标识符。我知道jstl会更容易,但是人们不希望这样做。
答案 0 :(得分:2)
类org.w3c.dom.Element
有许多方法可以访问元素属性。
这里最简单的情况是调用element.getAttribute("pidm");
。
它会为您提供给定属性的值。
否则,为方便起见,您可以浏览getAttribute...
的其他Element
方法。
API here。
答案 1 :(得分:1)
循环第一行中的Element
对象应该已经是<person />
元素。所以你应该能够通过以下方式获取属性:
for(int i = 0;i < nodes.getLength(); i++){
Element element = (Element) nodes.item(i);
// retrieve the attribute, then get the value
Attr pidm = element.getAttributeNode("pidm");
String pidmString = pidm.getValue();
// or get the attribute directly
String pidmDirectString = element.getAttribute("pidm");
... // the rest of your code
}
答案 2 :(得分:1)
你快到了:
for(int i = 0;i < nodes.getLength(); i++){
Element element = (Element) nodes.item(i);
value = elem.getAttributeValue("pidm");
}
答案 3 :(得分:1)
如果我理解你的问题是正确的,那么“pidm”就是一个属性。如果需要,请使用element.getAttribute(“pidm”);