我有一个我写的XML文件,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Library name="StreetCorner">
<Book name="HarryPotter">
<Author name="JKRowling"/>
</Book>
<Book name="SherlockHolmes">
<Author name="SirAConandoyle"/>
</Book>
<Book name="AngelsAndDemons">
<Author name="DanBrown"/>
</Book>
</Library>
阅读本文的最简单方法是什么?
我需要获取图书馆名称,该图书馆中的所有图书以及撰写该图书的作者姓名。
我已经有一个名为Library的模型,所以如果我可以用每个解析器提取数据,我可以将值设置为Library对象。
name
是我xml中每个元素的属性。
答案 0 :(得分:1)
在Java中从XML文件中获取信息的一种方法是使用Java XML DOM解析器。
您从:
开始DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file);
然后访问加载的数据:
Element root = document.getDocumentElement();
root.getElementsByTagName("Book")
您可以找到完整的教程here。这种方法最大的缺点是你将整个文档加载到内存中,但在你的情况下它不是问题。
其他内置选项包括:
您可以在this document中找到这些选项的详细说明。讨论了更多选项in this question。
答案 1 :(得分:1)
您可以尝试使用映射库。 Simple XML将自动解析您的XML并放置在Java对象中。您只需要使用注释标记对象。
答案 2 :(得分:1)
这是使用JAXB
读取xml的简单方法测试跑步者班级
public class XmlTest
{
public static void main(String[] args)
{
try
{
File file = new File("d:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Library.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Library library = (Library) jaxbUnmarshaller.unmarshal(file);
for (Book book : library.getBookList())
{
System.out.println(book.getName());
}
}
catch (JAXBException e)
{
e.printStackTrace();
}
}
}
预订课程
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
public class Book
{
@XmlAttribute(name = "name")
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
图书馆班级
@XmlRootElement(name = "Library")
@XmlAccessorType(XmlAccessType.FIELD)
public class Library
{
@XmlAttribute(name = "name")
private String name;
@XmlElement(name = "Book")
private List<Book> bookList;
public List<Book> getBookList()
{
return bookList;
}
public void setBookList(List<Book> bookList)
{
this.bookList = bookList;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
Xml编剧
public class XMlWriter
{
public static void main(String[] args)
{
ArrayList<Book> bookArrayList = new ArrayList<Book>();
Book myNewBook = new Book();
myNewBook.setName("My First Copy");
bookArrayList.add(myNewBook);
Library library = new Library();
library.setName("My Name");
library.setBookList(bookArrayList);
try
{
JAXBContext jaxbContext = JAXBContext.newInstance(Library.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
try
{
jaxbMarshaller.marshal(library, new FileOutputStream("D:\\file2.xml"));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
jaxbMarshaller.marshal(library, System.out);
}
catch (JAXBException e)
{
e.printStackTrace();
}
}
}
使用以下参考资料
<强> reading xml document using jaxb 强>
<强> http://www.mkyong.com/java/jaxb-hello-world-example/ 强>
*请注意,这不是进行异常处理的方法
答案 3 :(得分:0)
我建议使用Xpath。 Xpath可用于获取所有元素,例如在你的情况下,你可以获得所有书籍,或者你可以获得第一本书并循环阅读。
以下是Tutorialspoint.com的一个很好的教程: http://www.w3schools.com/xpath/xpath_examples.asp