以下ModifyXML Java class
用于阅读XML
文件并返回指定代码的所有值"" name"属性。
对于低于XML
的文件,它应返回ArrayList<String>
,其中包含tc_001
和tc_002
。
<root>
<tc name="tc_001">
</tc>
<tc name="tc_002">
</tc>
</root>
首先,我使用main方法在Java
中的单独Eclipse
项目中创建了一个类,该方法创建了一个新的ModifyXML
对象,并使用该对象调用getTCs()
方法。文件结构is this。在该项目中,我直接使用文件路径作为&#34; test.xml&#34;,这在运行时不会导致错误。
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/
。为什么该类只在类位于test.xml
项目中时才在我的主目录中查找Dynamic Web Page
文件?
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");
答案 0 :(得分:0)
使用相对路径不是一个好主意,因为有时您可能会从不同的目录运行项目。
因此要么对文件使用绝对路径("/some/path/to/your/file/file.xml"
),要么使用类路径来读取它,例如:
document = builder.parse(ModifyXML.class.getResourceAsStream("/" + filePath);
在第二种情况下,您必须将文件放在类路径的根目录。