使用Java中的SAX解析XML,不区分大小写。

5

我可以使用Java中的SAXParserFactory轻松解析xml,但是在某些文件中,存在一些非小写属性,例如linear3D="0.5"等。

我想要找到一种方法

attributes.getValue(attr)

不区分大小写,因此attributes.getValue("linear3d")将返回 "0.5"。

一种解决方案是首先将文件作为字符串读取,转换为小写,然后解析, 由于在这种类型的xml中这样做没有歧义。 但是,是否可以更简单地通过将某个标志添加到工厂或类似的东西来完成?


你应该更改你的模型。XML是区分大小写的。不要违背惯例。 - Michael-O
很遗憾,我正在尝试解析几乎符合XML标准的.flame文件。由于它们是由第三方软件创建的,所以我无法控制其语法。 - Per Alexandersson
这是什么意思?你没有任何保证它会始终是linear3d或linear3D? - Michael-O
理论上来说,它可能总是线性的3D,但属性与类文件一一对应,遵循Java标准,这些属性应该大写。解决方案是将我的Linear3d类重命名为Linear3D... - Per Alexandersson
你应该规范化类和字段名称,而不是一遍又一遍地转换XML文件。 - Michael-O
1个回答

4

不要将整个文件转换为小写,以下方法更好。这通过迭代所选标记的所有属性并忽略大小写来完成。

DefaultHandler 的实现内编写以下方法:

private String getValueIgnoreCase(Attributes attributes, String qName){
    for(int i = 0; i < attributes.getLength(); i++){
        String qn = attributes.getQName(i);
        if(qn.equalsIgnoreCase(qName)){
            return attributes.getValue(i);
        }
    }
    return null;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接