读写xml字符串最简单的java API是什么?

读写xml字符串最简单的java API是什么?,java,xml,xml-parsing,saxparser,Java,Xml,Xml Parsing,Saxparser,大家好,我读了一些其他问题的答案,但没有得到一个好的答案 所以我想知道一些读写xml字符串的好api。阅读本文,我正在考虑使用SAX,我已经开始编写一个带有状态机的xmlhandler来处理它,但是这个处理程序开始变大。。。 论方法 public void startElement(String uri, String name, String n, Attributes at) 我有一棵无限的else if树,这是正常的吗 要编写xml字符串,我还不知道 感谢您抽出时间答案取决于您想对XM

大家好,我读了一些其他问题的答案,但没有得到一个好的答案

所以我想知道一些读写xml字符串的好api。阅读本文,我正在考虑使用SAX,我已经开始编写一个带有状态机的xmlhandler来处理它,但是这个处理程序开始变大。。。 论方法

 public void startElement(String uri, String name, String n, Attributes at)
我有一棵无限的else if树,这是正常的吗

要编写xml字符串,我还不知道


感谢您抽出时间

答案取决于您想对XML做什么。如果要创建Java对象,请按照Matt Ball的建议使用JAXB

如果您想根据XML元素的名称(或其属性的内容,或其他任何内容)执行某些操作(即执行一些代码),那么很可能最终会遇到无休止的
If-else
。为什么?因为您正在根据XML中的内容对代码进行分支

您可以通过以下方式绕过它:

  • 将每个分支放在类(或方法)中,并使用类装入器(或反射)构造它的实例(或调用此方法)
  • 如果您必须响应有限的元素集,拥有一个
    HashMap
    ,并在解析之前填充它,然后简单地调用hash提供给您的方法;这意味着使用反射
这两种解决方案都会对速度产生负面影响,但(在我看来)极大地提高了代码的可读性、可重用性和可理解性

你可以考虑使用DOM而不是SAX。缺点:将整个XML加载到内存中;优点:您可以很好地浏览元素树,并且始终具有任何元素的上下文

至于编写XML:您可以编写非常简单的XML文档,它们与常规文本文件(打开流、写入流、关闭流)没有区别。但是,通常最好对DOM树进行操作,然后保存它;有很多关于它的教程


如果您的软件将经常被使用,并且您非常依赖XML文档的结构,并且希望避免由于元素放置错误而导致的严重崩溃,那么请确保为其提供一个模式(XSD)或DTD,并对加载的每个XML文档进行验证。这很有帮助;)

答案取决于您想对XML做什么。如果要创建Java对象,请按照Matt Ball的建议使用JAXB

如果您想根据XML元素的名称(或其属性的内容,或其他任何内容)执行某些操作(即执行一些代码),那么很可能最终会遇到无休止的
If-else
。为什么?因为您正在根据XML中的内容对代码进行分支

您可以通过以下方式绕过它:

  • 将每个分支放在类(或方法)中,并使用类装入器(或反射)构造它的实例(或调用此方法)
  • 如果您必须响应有限的元素集,拥有一个
    HashMap
    ,并在解析之前填充它,然后简单地调用hash提供给您的方法;这意味着使用反射
这两种解决方案都会对速度产生负面影响,但(在我看来)极大地提高了代码的可读性、可重用性和可理解性

你可以考虑使用DOM而不是SAX。缺点:将整个XML加载到内存中;优点:您可以很好地浏览元素树,并且始终具有任何元素的上下文

至于编写XML:您可以编写非常简单的XML文档,它们与常规文本文件(打开流、写入流、关闭流)没有区别。但是,通常最好对DOM树进行操作,然后保存它;有很多关于它的教程


如果您的软件将经常被使用,并且您非常依赖XML文档的结构,并且希望避免由于元素放置错误而导致的严重崩溃,那么请确保为其提供一个模式(XSD)或DTD,并对加载的每个XML文档进行验证。这很有帮助;)

您想用XML做什么?如果您试图将XML转换为Java对象(或反之亦然),则只需使用XML,而无需担心解析XML。要编写XML,请参见此处:是否可以显示无限的else If树?@Andreas_D:可能需要无限的空间来显示;-)您想用XML做什么的可能重复?如果您试图将XML转换为Java对象(或反之亦然),则只需使用XML,而无需担心解析XML。要编写XML,请参见此处:是否可以显示无限的else If树?@Andreas_D:可能需要无限的空间来显示;-)可能重复的