在 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 文件?