java如何解析一个节点有属性的字符串

像这样的字符串如何解析,我想得到的是openid和username
String userInfo = "<results>" + "<returncode>返回错误码</returncode>"
+ "<errmsg>操作失败的具体原因 </errmsg>" + "<user openid=”1”>"
+ "<username>lu</username>" + "</user>" + "<user openid=”2”>"
+ "<username>m</username>" + "</user>" + "</results>";
这是我解析的代码
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
factory.setCoalescing(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new ByteArrayInputStream(userInfo
.getBytes()));
int nodeLength = doc.getElementsByTagName("user").getLength();
for (int i = 0; i < nodeLength; i++) {
Node element = doc.getElementsByTagName("user").item(i);
System.out.println(element.getChildNodes().item(0)
.getChildNodes().item(0).getAttributes().item(0)
.getNodeValue());
}
} catch (Exception e) {
e.printStackTrace();
}

}
执行结果
Document doc = builder.parse(new ByteArrayInputStream(userInfo
.getBytes()));
这句代码报错
[Fatal Error] :1:80: Open quote is expected for attribute "{1}" associated with an element type "openid".
org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with an element type "openid".

xml格式的字符串,建议使用Jdom来解析比较方便

import java.io.StringReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class TestJdom {
public static void main(String[] args) {
String userInfo = "<results>" + "<returncode>返回错误码</returncode>"
+ "<errmsg>操作失败的具体原因 </errmsg>" + "<user openid='1'>"
+ "<username>lu</username>" + "</user>" + "<user openid='2'>"
+ "<username>m</username>" + "</user>" + "</results>";
try{
Document doc = new SAXBuilder().build(new StringReader(userInfo));
List listUser = doc.getRootElement().getChildren("user");
String openid_1 = ((Element)listUser.get(0)).getAttributeValue("openid");
String username_1 = ((Element)listUser.get(0)).getChildText("username");
String openid_2 = ((Element)listUser.get(1)).getAttributeValue("openid");
String username_2 = ((Element)listUser.get(1)).getChildText("username");
System.out.println(openid_1 + " " + username_1 + " " + openid_2 + " " + username_2);
}catch(Exception e){
e.printStackTrace();
}
}
}

==========================
你代码中的"<user openid=”1”>" 使用了中文“号,应该改成'或者加\转义
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-30
看你用什么解析器了,JDOM, DOM?
相似回答