空の属性を含むバグのある xml があり、空の属性で咳をするパーサーがあります。xml の生成も、空の属性で咳をするパーサーも制御できません。だから私がやりたいのは、すべての空の属性を単純に削除する前処理ステップです。
空の属性を見つけることができましたが、それらを削除する方法がわかりません:
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expr = xpath.compile("//@*");
Object result = expr.evaluate(d, XPathConstants.NODESET);
if (result != null) {
NodeList nodes = (NodeList) result;
for(int node=0;node<nodes.getLength();node++)
{
Node n = nodes.item(node);
if(isEmpty(n.getTextContent()))
{
this.log.warn("Found empty attribute declaration "+n.toString());
NamedNodeMap parentAttrs = n.getParentNode().getAttributes();
parentAttrs.removeNamedItem(n.getNodeName());
}
}
}
このコードは、n.getParentNode().getAttributes() にアクセスするときに NPE を提供します。しかし、要素にアクセスできない場合、要素から空の属性を削除するにはどうすればよいでしょうか?