Ich habe ein org.w3c.dom.Element
Objekt in meine Methode übergeben. Ich muss die gesamte XML-Zeichenkette einschließlich ihrer Kindknoten (das gesamte Objektdiagramm) sehen. Ich bin auf der Suche nach einer Methode, die die Element
in eine XML-Formatzeichenfolge konvertieren kann, die ich System.out.println
on kann. Nur println()
auf dem 'Element' Objekt wird nicht funktionieren, weil toString()
nicht das XML-Format ausgeben und nicht durch seinen Kind-Knoten gehen wird. Gibt es einen einfachen Weg, ohne meine eigene Methode zu schreiben? Vielen Dank.Wie ich org.w3c.dom.Element in String-Format in Java ausgeben?
Antwort
In der Standard-JAXP-API nicht unterstützt, habe ich die JDom-Bibliothek für diesen Zweck verwendet. Es verfügt über eine Druckerfunktion, Formatter Optionen usw. http://www.jdom.org/
Vorausgesetzt, dass Sie mit dem Standard-API halten wollen ...
Sie eine DOMImplementationLS verwenden:?
Document document = node.getOwnerDocument();
DOMImplementationLS domImplLS = (DOMImplementationLS) document
.getImplementation();
LSSerializer serializer = domImplLS.createLSSerializer();
String str = serializer.writeToString(node);
Wenn die < xml version = "1.0" encoding = "UTF-16"? > Erklärung stört Sie, können Sie eine transformer stattdessen verwenden könnte:
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(node),
new StreamResult(buffer));
String str = buffer.toString();
Dies ist die Lösung, wenn Sie [html: null] erhalten und HTML erwarten. Dieser Kommentar wurde hinzugefügt, damit Google die Antwort hoffentlich indizieren kann. –
Sie können weiterhin LSSerializer verwenden und "UTF-8" ausgeben. Verwenden Sie stattdessen LSOutput mit StringWriter und setzen Sie den Codierungstyp auf "UTF- * 8" – ricosrealm
Funktioniert mit w3c Dokumentobjekt sowie – thirdy
Wenn Sie das Schema des XML oder kann sonst JAXB Bindungen für sie erstellen, könnten Sie die JAXB Marshaller zu System.out schreiben verwenden:
import javax.xml.bind.*;
import javax.xml.bind.annotation.*;
import javax.xml.namespace.QName;
@XmlRootElement
public class BoundClass {
@XmlAttribute
private String test;
@XmlElement
private int x;
public BoundClass() {}
public BoundClass(String test) {
this.test = test;
}
public static void main(String[] args) throws Exception {
JAXBContext jxbc = JAXBContext.newInstance(BoundClass.class);
Marshaller marshaller = jxbc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.marshal(new JAXBElement(new QName("root"),BoundClass.class,new Main("test")),System.out);
}
}
Einfache 4 Zeilen Code String
ohne XML-Deklaration (<?xml version="1.0" encoding="UTF-16"?>
) von org.w3c.dom.Element
Versuchen jcabi-xml mit Motto:
String xml = new XMLDocument(element).toString();
Mit VTD-XML, können Sie in den Cursor passieren und einen einzigen getElementFragment Anruf das Segment abgerufen werden (wie bezeichnet durch seine Offset und Länge) ... Im Folgenden finden ein Beispiel
import com.ximpleware.*;
public class concatTest{
public static void main(String s1[]) throws Exception {
VTDGen vg= new VTDGen();
String s = "<users><user><firstName>some </firstName><lastName> one</lastName></user></users>";
vg.setDoc(s.getBytes());
vg.parse(false);
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("https://stackoverflow.com/users/user/firstName");
int i=ap.evalXPath();
if (i!=1){
long l= vn.getElementFragment();
System.out.println(" the segment is "+ vn.toString((int)l,(int)(l>>32)));
}
}
}
dies ist das, was in jcabi getan:
private String asString(Node node) {
StringWriter writer = new StringWriter();
try {
Transformer trans = TransformerFactory.newInstance().newTransformer();
// @checkstyle MultipleStringLiterals (1 line)
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty(OutputKeys.VERSION, "1.0");
if (!(node instanceof Document)) {
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
}
trans.transform(new DOMSource(node), new StreamResult(writer));
} catch (final TransformerConfigurationException ex) {
throw new IllegalStateException(ex);
} catch (final TransformerException ex) {
throw new IllegalArgumentException(ex);
}
return writer.toString();
}
und es funktioniert für mich!
- 1. Bild in Java ausgeben
- 2. Wie verwendet man StringFormat in XAML-Elementen?
- 3. können Sie ein Jaxb-Objekt in org.w3c.dom.Element konvertieren?
- 4. angepasste StringFormat in WPF DataGrid
- 5. Binding StringFormat
- 6. Wie kann ich Java Bytecode zur Laufzeit ausgeben und ausführen?
- 7. JavaScript Stringformat mit Array
- 8. StringFormat in silverlight Xaml und Ressourcen
- 9. StringFormat mit Font Weight
- 10. WPF StringFormat auf Etiketteninhalt
- 11. XML-Datei in Java analysieren und alle Fehler ausgeben
- 12. Wie kann ich eine Länge eines Arrays in Javascript ausgeben?
- 13. Wie kann ich einfache Schallwellen in C# synthetisieren und ausgeben?
- 14. Wie kann ich löschbaren Text in C++ zur Konsole ausgeben?
- 15. Wie kann ich führende Nullen in Ruby ausgeben?
- 16. Wie kann ich einen HTML-Kommentar in Compojure/Hiccup ausgeben?
- 17. Wie erzwinge ich die Anzeige von '+' mit StringFormat
- 18. Wie programmiere ich die Bindung einer Textbox mit Stringformat?
- 19. Wie kann ich einen char-Wert für ein int-Array in Java ausgeben?
- 20. Wie kann ich die Daten individuell ausgeben?
- 21. Nur gültige Eingaben in Java akzeptieren und Rest ausgeben
- 22. Sparktables: Wie kann ich Additionstabellenelemente ausgeben?
- 23. Wie ein int in binär ausgeben?
- 24. Wie kann ich Redis Lua-Skripte ausgeben?
- 25. Wie kann ich einfach einen Dollarbetrag ausgeben?
- 26. Verwendung von Anführungszeichen in StringFormat der Bindung in WPF
- 27. Java - initialisierende Klasse mit Typparametern ausgeben
- 28. Ausgeben jeden Wert in Array
- 29. WPF DataGrid: Konverter und StringFormat
- 30. Unterstützt Silverlight StringFormat beim Binden?
+1 für das ist nicht die Absicht der Standard-API org.w3c.dom. Wenn ich mich für XML-Blöcke als Text interessiere, versuche ich normalerweise, sie als Text mit einer Regex-Übereinstimmung zu analysieren (wenn das Suchkriterium einfach als Regex dargestellt wird). –