我需要解析XML,并使用JDOM将所有属性名称更改为小写。有没有一个很好的方法来做到这一点?
所以,如果我有:
<record ID="1" name="Dom" />
<record iD="2" nAmE="Bob" />
它变成了:
<record id="1" name="Dom" />
<record id="2" name="Bob" />
答案 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 部分)。 (根据您需要的容忍度,您的正则表达式可能也必须接受这些字符之间的空格。)
="
打印:
<块引用>