Java 如何读取包含多个元素的XML文件
我有一个我写的XML文件,如下所示:Java 如何读取包含多个元素的XML文件,java,xml,Java,Xml,我有一个我写的XML文件,如下所示: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Library name="StreetCorner"> <Book name="HarryPotter"> <Author name="JKRowling"/> </Book> <Book name="SherlockHolmes">
<?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中每个元素的属性。我建议使用Xpath。Xpath可用于将的所有元素组合在一起,例如,在您的案例中,您可以获得所有书籍,或者您可以获得第一本书并循环阅读它
下面是Tutorialspoint.com上的一个关于它的好教程:
我建议使用Xpath。Xpath可用于将的所有元素组合在一起,例如,在您的案例中,您可以获得所有书籍,或者您可以获得第一本书并循环阅读它 下面是Tutorialspoint.com上的一个关于它的好教程:
我建议使用Xpath。Xpath可用于将的所有元素组合在一起,例如,在您的案例中,您可以获得所有书籍,或者您可以获得第一本书并循环阅读它 下面是Tutorialspoint.com上的一个关于它的好教程:
我建议使用Xpath。Xpath可用于将的所有元素组合在一起,例如,在您的案例中,您可以获得所有书籍,或者您可以获得第一本书并循环阅读它 下面是Tutorialspoint.com上的一个关于它的好教程:
从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")
你可以找到完整的教程。这种方法最大的缺点是将整个文档加载到内存中,但在您的情况下这不是问题
其他内置选项包括:
- SAX解析器
- JAXP
您可以在中找到这些选项的详细说明。讨论了更多的选项。从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")
你可以找到完整的教程。这种方法最大的缺点是将整个文档加载到内存中,但在您的情况下这不是问题
其他内置选项包括:
- SAX解析器
- JAXP
您可以在中找到这些选项的详细说明。讨论了更多的选项。从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")
你可以找到完整的教程。这种方法最大的缺点是将整个文档加载到内存中,但在您的情况下这不是问题
其他内置选项包括:
- SAX解析器
- JAXP
您可以在中找到这些选项的详细说明。讨论了更多的选项。从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")
你可以找到完整的教程。这种方法最大的缺点是将整个文档加载到内存中,但在您的情况下这不是问题
其他内置选项包括:
- SAX解析器
- JAXP
您可以在中找到这些选项的详细说明。还讨论了更多选项。您可以尝试使用映射库。将自动解析XML并放入Java对象中。您只需使用注释标记对象。您可以尝试使用映射库。将自动解析XML并放入Java对象中。您只需使用注释标记对象。您可以尝试使用映射库。将自动解析XML并放入Java对象中。您只需使用注释标记对象。您可以尝试使用映射库。将自动解析XML并放入Java对象中。您只需使用注释标记对象。下面是一种使用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;
}
}
@XmlRootElement(name=“Library”)
@XmlAccessorType(XmlAccessType.FIELD)
公共班级图书馆
{
@XmlAttribute(name=“name”)
私有字符串名称;
@xmlement(name=“Book”)
私人书单;
公共列表getBookList()
{
归还书目;
}
公共作废收件簿列表(列表图书列表)
{
this.bookList=bookList;
}
公共字符串getName()
{
返回名称;
}
公共void集合名(字符串名)
{
this.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();
}
}
}
公共类XMlWriter
{
公共静态void main(字符串[]args)
{
ArrayList bookArrayList=新建ArrayList();
Book myNewBook=新书();
myNewBook.setName(“我的第一份副本”);
bookaraylist.add(myNewBook);
库=新库();
library.setName(“我的名字”);
图书馆.setBookList(bookArrayList);
尝试
{
JAXBContext JAXBContext=JAXBContext.newInstance(Library.class);
Marshaller jaxbMarshaller=jaxbContext.createMarshaller();
setProperty(Marshaller.JAXB_格式化的_输出,true);
尝试
{
marshall(库,新文件输出流(“D:\\file2.xml”);
}
catch(filenotfounde异常)
{
e、 printStackTrace();
}
jaxbMarshaller.marshall(library,System.out);
}
捕获(JAXBEException e)
{
e、 printStackTrace();
}
}
}
使用了以下参考文献
*注意这不是处理异常的方法这里有一个使用JAXB读取xml的简单方法 试验转轮cl