首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java语言中解析XML的最佳方法是什么?

在Java语言中解析XML的最佳方法是什么?
EN

Stack Overflow用户
提问于 2009-05-26 05:12:39
回答 9查看 70.2K关注 0票数 46

在Java语言中解析XML的最佳方法是什么?合法的dateTime值包括2002-10-10T12:00:00-05:00和2002-10-10T17:00:00Z

有没有好的开源库可以使用,或者我是否应该使用SimpleDateFormat或类似的工具来开发自己的开源库?

EN

回答 9

Stack Overflow用户

发布于 2011-04-20 23:20:08

还有javax.xml.bind.DatatypeConverter#parseDateTime(String xsdDateTime),它是JDK的一部分。

票数 75
EN

Stack Overflow用户

发布于 2009-05-26 06:17:38

我想你想要Joda TimeISODateTimeFormat.dateTimeNoMillis()。总的来说,我强烈建议您远离Java中内置的Date/Calendar类。Joda Time的设计要好得多,它支持不可变性(特别是格式器是不可变的,并且是线程安全的),并且是Java7中新的日期/时间API的基础。

示例代码:

代码语言:javascript
复制
import org.joda.time.*;
import org.joda.time.format.*;

class Test
{   
    public static void main(String[] args)
    {
        parse("2002-10-10T12:00:00-05:00");
        parse("2002-10-10T17:00:00Z");
    }

    private static final DateTimeFormatter XML_DATE_TIME_FORMAT =
        ISODateTimeFormat.dateTimeNoMillis();

    private static final DateTimeFormatter CHECKING_FORMAT =
        ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC);

    static void parse(String text)
    {
        System.out.println("Parsing: " + text);
        DateTime dt = XML_DATE_TIME_FORMAT.parseDateTime(text);
        System.out.println("Parsed to: " + CHECKING_FORMAT.print(dt));
    }
}

输出:

代码语言:javascript
复制
Parsing: 2002-10-10T12:00:00-05:00
Parsed to: 2002-10-10T17:00:00.000Z
Parsing: 2002-10-10T17:00:00Z
Parsed to: 2002-10-10T17:00:00.000Z

(请注意,在输出中,两者都以相同的UTC时间结束。格式化后的输出使用UTC,因为我们在withZone调用中要求它使用UTC。)

票数 41
EN

Stack Overflow用户

发布于 2009-05-26 14:48:10

StaxMan是绝对正确的。为了使用SimpleDateFormat,您需要关闭每个SimpleDateFormat中的松散解析,并迭代几种SimpleDateFormat格式,直到找到解析日期而不抛出异常的格式。如果您让松散的解析处于开启状态,那么当您并不真正想要一个匹配时,很容易得到一个匹配,并且lexical space of XSD:DateTime在格式上留下了一些SimpleDateFormat不能在单个表达式中处理的灵活性。

XML Schema 1.0确实使用了ISO 8601,Joda Time按照Jon Skeet的建议实现了ISO 8601,因此这是一个有效的选项。

如果希望将其全部保存在原生Java包中,还可以结合使用XMLGregorianCalendarDatatypeFactory来解析和创建XSD:Datetime字符串。

请参阅DatatypeFactory.newXMLGregorianCalendar和XMLGregorianCalendar.toXMLFormat

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/909022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档