JDOM - 小写所有属性名称

时间:2012-07-10 01:05:39

标签: java xml parsing jdom

我需要解析XML,并使用JDOM将所有属性名称更改为小写。有没有一个很好的方法来做到这一点?

所以,如果我有:

<record ID="1" name="Dom" />
<record iD="2" nAmE="Bob" />

它变成了:

<record id="1" name="Dom" />
<record id="2" name="Bob" />

2 个答案:

答案 0 :(得分:0)

使用JDOM 2.0.2你可能会使用XPath,并循环名称。问题是你可能最终会遇到冲突,例如,如果一个Element有多个属性可以解析为相同的小写名称,比如'ID'和'id'....但这可能是你赢得的不得不处理。

尝试一些代码(只返回no-namespace命名空间中的属性):

XPathExpression<Attribute> xp = XPathFactory.instance().compile("//@*", Filters.attribute());
for (Attribute a : xp.evaluate(mydoc)) {
    a.setName(a.getName().toLowerCase());
}

如果您不想使用XPath(这种方式也可能更快),您可以循环后代:

for (Element e : mydoc.getDescendants(Filters.element())) {
    if (e.hasAttributes()) {
        for (Attribute a : e.getAttributes()) {
            a.setName(a.getName().toLowerCase());
        }
    }
}

罗尔夫

答案 1 :(得分:0)

不是您所要求的——“使用 JDOM”——也不是“正确的”,但可能更快更容易:如果您正在操作包含 XML 的 String,您可以使用正则表达式 ({ {1}}) 而不是 JDOM。

您可以匹配后跟字符串 java.util.regex.Pattern 的属性名称,该字符串不能出现在 XML 中除了属性之外的任何其他地方(除非您的文档使用 CDATA 部分)。 (根据您需要的容忍度,您的正则表达式可能也必须接受这些字符之间的空格。)

="

打印:

<块引用>