Estoy tratando de usar Java para eliminar todos los atributos xml de un archivo XML que coincida con un nombre de atributo. Estoy atascado en este punto. En la parte inferior de este código, puedo obtener el valor del atributo de cada nodo a medida que avanzo, pero no puedo entender cómo eliminar el atributo del Nodo por completo. ¿Algunas ideas?¿Usar Java para eliminar todos los atributos xml de un archivo XML que coincida con un nombre de atributo?
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class StripAttribute {
public static void main(String[] args) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
org.w3c.dom.Document doc = null;
NodeList nodes = null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse("a.xml");
nodes = doc.getChildNodes();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
for (int i = 0; i < nodes.getLength(); i++) {
String id = nodes.item(i).getNodeValue();
if (id.equals("siteKey")) {
Element el = ((Attr) nodes.item(i)).getOwnerElement();
el.removeAttribute(id);
}
}
Transformer transformer;
StreamResult result = null;
try {
transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
String xmlString = result.getWriter().toString();
System.out.println(xmlString);
}
}
Este es un ejemplo del XML Quiero transformar:
https://gist.github.com/2784907
Esta versión del documento (org.w3c.dom.Document) no parecen tener un método removeAttributeByName (Cadena), que es lo que iba a necesitar. – djangofan
@djangofan lo siento, no presté suficiente atención. Intenta obtener el elemento y luego elimina los atributos. – tibtof
Intenté su sugerencia pero no funcionó del todo. Actualicé mi código en mi pregunta para reflejar los cambios. Te daré un voto positivo por ayudarme. ¿O tal vez funcionó y solo estoy imprimiendo el objeto equivocado? Necesito investigar ... – djangofan