我正在尝试从Resources解析XML文件。解析完文件后,我打算在其上执行一些XPATH函数。
我的代码是:
Resources res = getResources();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = null;
Document doc = null;
XPathExpression expr = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
doc = builder.parse(res.getResourceName(R.xml.cdatest01));
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
调试代码时,会在parse语句中抛出IOException错误。 logcat将错误显示为
java.net.MalformedURLException: unknown protocol: com.apps4care.mycarerecord
关于我做错了什么的任何线索......
答案 0 :(得分:2)
您正在尝试将完整的资源名称从Resources.getResourceName
传递到需要URI字符串的DocumentBuilder.parse
。这些不是一回事。
这就是你得到MalformedURLException
的原因您可以通过多种方式做到这一点,包括:
DocumentBuilder.parse
的变体,该变体采用InputStream并使用res.openRawResource
代替。这可能是一个较小的变化。Resources.getXml
取回XML pull解析器并使用它而不是使用DOM API来解析XML。答案 1 :(得分:0)
尝试
InputStream fIn = getResources().openRawResource(R.raw.hot);
Document doc=builder.parse(fIn);
答案 2 :(得分:-1)
请尝试使用我正在运行的代码....
try {
File fXmlFile = new File("/root/Desktop/staff.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
// optional, but recommended
// read this -
// http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
System.out.println("Root element :"
+ doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("staff");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Staff id : "
+ eElement.getAttribute("id"));
System.out.println("First Name : "
+ eElement.getElementsByTagName("firstname")
.item(0).getTextContent());
System.out.println("Last Name : "
+ eElement.getElementsByTagName("lastname").item(0)
.getTextContent());
System.out.println("Nick Name : "
+ eElement.getElementsByTagName("nickname").item(0)
.getTextContent());
System.out.println("Salary : "
+ eElement.getElementsByTagName("salary").item(0)
.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}