Java 如何读取包含多个元素的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文件,如下所示:

<?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