java– 我可以使用SimpleXML来解析结构未知的XML吗?

java– 我可以使用SimpleXML来解析结构未知的XML吗?,第1张

概述我使用SimpleXML来解析通信协议中使用的小型XML文件.这一切都很好,但现在我正在实现协议的一部分,其中包括一种自由格式的XML.例如,像这样的XML:<telegram><config><foo>yes</foo><bar>no</bar></config><elegram>foo和bar将来可能会发生变化,或者可能会添

我使用SimpleXML来解析通信协议中使用的小型XML文件.这一切都很好,但现在我正在实现协议的一部分,其中包括一种自由格式的XML.

例如,像这样的XML:

<telegram>  <config>    <foo>yes</foo>    <bar>no</bar>  </config></telegram>

foo和bar将来可能会发生变化,或者可能会添加一个元素baz,而无需触及解析代码.我想使用类似的结构在Java中访问这些元素

tree.getConfig().get("bar");   // returns "no"

我可以使用SimpleXML来解析它吗?我查看了文档,但找不到我需要的东西.

解决方法:

Can I use SimpleXML to parse that?

不是开箱即用 – 但写一个Converter就可以了.

@Root(name = "telegram")@Convert(Telegram.TelegramConverter.class) // Requires AnnotationStrategypublic class Telegram{    private Map<String, String> config;    public String get(String name)    {        return config.get(name);    }    public Map<String, String> getConfig()    {        return config;    }    // ...    @OverrIDe    public String toString()    {        return "Telegram{" + "config=" + config + '}';    }    static class TelegramConverter implements Converter<Telegram>    {        @OverrIDe        public Telegram read(inputNode node) throws Exception        {            Telegram t = new Telegram();            final inputNode config = node.getNext("config");            t.config = new HashMap<>();            // Iterate over config's child nodes and put them into the map            inputNode cfg = config.getNext();            while( cfg != null )            {                t.config.put(cfg.getname(), cfg.getValue());                cfg = config.getNext();            }            return t;        }        @OverrIDe        public voID write(OutputNode node, Telegram value) throws Exception        {            // Implement if you need serialization too            throw new UnsupportedOperationException("Not supported yet.");        }    }}

用法:

final String xml = "<telegram>\n"        + "  <config>\n"        + "    <foo>yes</foo>\n"        + "    <bar>no</bar>\n"        + "    <baz>maybe</baz>\n" // Some "future element"        + "  </config>\n"        + "</telegram>";/* * The AnnotationStrategy is set here since it's * necessary for the @Convert annotation */Serializer ser = new Persister(new AnnotationStrategy());Telegram t = ser.read(Telegram.class, xml);System.out.println(t);

结果:

Telegram{config={bar=no, foo=yes, baz=maybe}}

总结

以上是内存溢出为你收集整理的java – 我可以使用SimpleXML来解析结构未知的XML吗?全部内容,希望文章能够帮你解决java – 我可以使用SimpleXML来解析结构未知的XML吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1118136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存