【发布时间】:2016-08-08 06:31:30
【问题描述】:
以下ModifyXML Java class 用于读取XML 文件并返回指定标签的“名称”属性的所有值。
对于下面的XML 文件,它应该返回一个包含tc_001 和tc_002 的ArrayList<String>。
<root>
<tc name="tc_001">
</tc>
<tc name="tc_002">
</tc>
</root>
首先,我在Eclipse 中的一个单独的Java 项目中创建了该类,其中的main 方法创建了一个新的ModifyXML 对象并使用该对象调用getTCs() 方法。文件结构is this。在那个项目中,我直接使用文件路径作为“test.xml”,这在运行时不会导致错误。
public class ModifyXML {
/*
* constructor
* initializing main objects
*/
public ModifyXML() {
//this is the file path i used
filePath = "test.xml";
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
document = builder.parse(filePath);
}
/*
*getTCs method
*/
public ArrayList<String> getTCs(String tagType) {
ArrayList<String> tcList = new ArrayList<>();
String attributeName = "name";
NodeList nodes = document.getElementsByTagName(tagType);
int j = nodes.getLength();
for(int i = 0; i < j; i++){
Node tc = nodes.item(i);
if(tc.getNodeType() == Node.ELEMENT_NODE){
String tcName = tc.getAttributes().getNamedItem(attributeName).getNodeValue();
tcList.add(tcName);
}
}
Iterator<String> iter = tcList.iterator();
while(iter.hasNext())
System.out.println(iter.next());
return tcList;
}
public static void main(String[] args) {
ModifyXML a = new ModifyXML();
a.getTCs("tc");
}
然后我将该类复制到Dynamic Web Page 项目的src 文件夹和test.xml 文件到Dynamic Web Page 项目,然后我删除了该类的主要方法。 Dynamic Web Page 项目is this. 的文件结构但是当我调用getTCs() 方法时,在servlet 的service() 方法中,发生了异常。
java.io.FileNotFoundException: /home/srinesh/test.xml (No such file or directory)
我使用的是 Ubuntu,/home/srinesh/ 是我的主目录。我的Dynamic Web Page 项目的项目目录是/home/dazz/Projects/workspace/Sanitizor/。为什么只有当该类位于 Dynamic Web Page 项目中时,该类才在我的主目录中查找 test.xml 文件?
Servlet 类如下所示。
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter printWriter = response.getWriter();
ModifyXML xml = new ModifyXML("test.xml");
ArrayList<String> tc = xml.getTCs("tc");
【问题讨论】: