在 java 中使用 SAX 解析 XML,不区分大小写。

Posted

技术标签:

【中文标题】在 java 中使用 SAX 解析 XML,不区分大小写。【英文标题】:Parse XML with SAX in java, case insensitive. 【发布时间】:2011-10-16 13:58:16 【问题描述】:

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

我想以某种方式制作

attributes.getValue(attr)

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

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

【问题讨论】:

你应该改变你的模型。 XML 区分大小写。不要违背约定。 好吧,不幸的是,我正在尝试解析几乎符合 .xml 标准的 .flame 文件。我无法控制它的语法,因为它们是由第三方软件创建的。 这是什么意思?你不能保证它总是linear3d或linear3D? 嗯,理论上,它可能总是线性3D,但是,属性与类文件是一一对应的,并且按照Java标准,这些应该大写。一个解决方案是将我的 Linear3d 类重命名为 Linear3D... 您应该真正规范化类和字段名称,而不是一遍又一遍地转换 XML 文件。 【参考方案1】:

下面的方法更好,而不是将整个文件转换为小写。这会遍历所选标签的所有属性并忽略大小写。

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;

【讨论】:

以上是关于在 java 中使用 SAX 解析 XML,不区分大小写。的主要内容,如果未能解决你的问题,请参考以下文章

使用 SAX 解析器,如何解析具有相同名称标签但元素不同的 xml 文件?

在 Java 中使用 SAX 解析大型 XML

使用 SAX 在 Java 中解析 XML:价值减半

Java xml 操作(Dom4J修改xml   + xPath技术  + SAX解析 + XML约束)

java使用sax解析xml

Java web——xml文件读取的解析方式(DOM和SAX)