我正在尝试处理节点列表中的所有节点并替换文本中的特殊字符。
我面临的问题是我需要返回一个包含所有替换值的对象。如果我使用递归,则无法返回值吗?
如何迭代处理所有元素并删除特殊字符的xml nodelist?我目前的工作是做这个
public static IXMLDatagram removeIllegalCharsFromDataGram(IXMLDatagram dg, String[] illegalValues)
{
NodeList nodeList = dg.getAsDOMElement().getElementsByTagName("*");
for (int i = 0 ; i < nodeList.getLength() ; i++)
{
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE)
{
for(String replaceChar : illegalValues)
{
// do something with the current element
if(node.getTextContent().contains(replaceChar))
{
node.setTextContent(node.getTextContent().replace(replaceChar, ""));
}
}
}
}
return dg;
}
但是,这并未考虑在这些文档中定期更改并且通常嵌套得很深的子节点
由于
答案 0 :(得分:0)
递归通常是深度处理DOM的最简单方法:
public static void removeIllegalCharsFromDataGram(IXMLDatagram dg,
String[] illegalValues) {
Node root = dg.getAsDOMElement().getDocumentElement();
removeIllegal(illegalValues, root);
}
private static void removeIllegal(String[] illegalValues, Node root) {
NodeList nodeList = root.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
removeIllegal(illegalValues,node);//<-- Call for every child
if (node.getNodeType() == Node.ELEMENT_NODE) {
for (String replaceChar : illegalValues) {
// do something with the current element
if (node.getTextContent().contains(replaceChar)) {
node.setTextContent(node.getTextContent().replace(
replaceChar, ""));
}
}
}
}
}