Sto cercando di utilizzare Java per rimuovere tutti gli attributi xml da un file XML che corrisponde a un nome-attributo. Sono bloccato a questo punto. Nella parte inferiore di questo codice sono in grado di ottenere il valore dell'attributo di ciascun nodo mentre eseguo il ciclo, ma non riesco a capire come eliminare completamente l'attributo dal nodo. Qualche idea?Utilizzo di Java per rimuovere tutti gli attributi xml da un file XML che corrisponde a un nome-attributo?
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);
}
}
Ecco un esempio di XML che voglio trasformare:
https://gist.github.com/2784907
Questa versione del documento (org.w3c.dom.Document) non sembra avere un metodo removeAttributeByName (String), che è quello che avrei bisogno. – djangofan
@djangofan scusa, non ho prestato abbastanza attenzione. Cerca di ottenere l'elemento e quindi rimuovere gli attributi. – tibtof
Ho provato il tuo suggerimento ma non ha funzionato. Ho aggiornato il mio codice nella mia domanda per riflettere le modifiche. Ti darò un upvote per avermi aiutato. O forse ha funzionato e sto solo stampando l'oggetto sbagliato? Bisogno di ricerca ... – djangofan