【问题标题】:which XML library to use for file containing diverse XML tags? [closed]哪个 XML 库用于包含不同 XML 标记的文件? [关闭]
【发布时间】:2015-09-29 18:17:43
【问题描述】:

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

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

 1.<link-protection/>
 2.<undocumented><lcd>
 3. <message>
       *****{with escape characters}</message>
 4.<xyz comment= "**hshhshs">, and more

我目前使用两种方法:

  1. 逐行解析 XML 并处理特定情况。
  2. 使用 SAX 解析器进行解析(即使在这里我也必须处理很多情况) 我用startElement(), endElement(), characters()

在这两种情况下,开发时间与我必须处理各种标签的时间相同。

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

【问题讨论】:

  • 你有架构吗?
  • 您的方法 (1) 听起来很可疑,就像您正在编写一个自制的解析器。这绝对不是这样做的方法。
  • 很大程度上取决于您要如何处理这些信息。是否需要填充 Java 对象模型?还是将数据表示为 HTML 页面?或者找到某个属性的最大值?每种情况下正确的解析方法都会有所不同。
  • 我没有 Java 对象模型。我只想将 XML 转换为平面格式。例如:' vauevalue op: A B value A C value'

标签: java xml sax


【解决方案1】:

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

您还可以使用 JAXB(用于 XML 绑定的 Java 架构)。

以下是我将遵循的步骤:

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你应该看看我的unXml-library。它从 XML 文档中挑选出 XPath,并返回 av json 对象(或 pojo,使用来自 Jackson 的映射器)。

    示例 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"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多