哪个XML库用于包含不同XML标记的文件?

时间:2015-09-29 18:17:43

标签: java xml sax

我发现很多帖子描述了不同XML解析器的优点,但我的问题非常具体。

我的输入XML文件中有各种各样的标记:

project(":android") {
apply plugin: "android"

configurations { natives }

dependencies {
    compile project(":core")
    compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
    compile "com.badlogicgames.ashley:ashley:$ashleyVersion"
    compile "com.badlogicgames.gdx:gdx-ai:$aiVersion"
    compile 'com.facebook.android:facebook-android-sdk:4.6.0'
 }
}

我目前使用两种方法:

  1. 逐行解析XML并处理特定情况。
  2. 使用SAX解析器进行解析(即使在这里我必须处理很多情况) 我使用了 1.<link-protection/> 2.<undocumented><lcd> 3. <message> *****{with escape characters}</message> 4.<xyz comment= "**hshhshs">, and more
  3. 在这两种情况下,开发时间与我处理各种标签的时间相同。

    我想知道我可以使用更方便的XML解析器。

2 个答案:

答案 0 :(得分:1)

查看XStream - https://x-stream.github.io/。 这个框架非常有用,可以处理XML和JSON。

您还可以使用JAXB(Java Architecture for XML binding)。

以下是我要遵循的步骤:

  1. 创建所需的XML文件。
  2. 从XML生成XSD架构文件。你可以使用内置的编辑器生成器或使用免费的在线编辑器 - 有很多它们。
  3. 为XML部分创建一系列DTO类。例如, message XML标记可以表示为Java类Message,每个字段都为XML解析器注释。如果您打算使用JAXB,则需要javax.xml注释。 XStream使用自己的注释。
  4. 使用JAXB(编组/解组),XStream或任何其他解析器创建解析XML流的代码。确保使用您选择的解析器注册上面生成的XSD文件。
  5. 希望这有帮助。

答案 1 :(得分:1)

您应该查看我的unXml - 库。它从XML文档中选取XPath,并使用Jackson中的映射器返回av json对象(或pojo)。

示例XML

<root>
  <id>1</id>
  <title>mytitle</title>
</root>

Java中的示例ParserCode

import com.fasterxml.jackson.databind.node.ObjectNode;
import com.nerdforge.unxml.Parsing;
import com.nerdforge.unxml.factory.ParsingFactory;
...

public class MyController {
    public ObjectNode getJsonFromXml(String inputXmlString) {
        Parsing parsing = ParsingFactory.getInstance().create();
        Document document = parsing.xml().document(inputXmlString);

        Parser<ObjectNode> parser = parsing.obj("root")
          .attribute("id", "id", parsing.number()) // uses a number parser
          .attribute("title") // both xpath and json-attribute-key is "title"
          .build();

        ObjectNode node = parser.apply(document);
        return node;
    }
}

在ObjectNode中生成Json

{
  "id":1,
  "title":"mytitle"
}
相关问题