Tengo un objeto org.w3c.dom.Element
pasado a mi método. Necesito ver toda la cadena xml incluyendo sus nodos secundarios (el gráfico completo del objeto). Estoy buscando un método que puede convertir el Element
en una cadena de formato xml que puedo System.out.println
en. Solo println()
en el objeto 'Elemento' no funcionará porque toString()
no generará el formato xml y no pasará por su nodo hijo. ¿Hay una manera fácil sin escribir mi propio método para hacer eso? Gracias.Cómo salgo org.w3c.dom.Element al formato de cadena en java?
Respuesta
No soportado en la API JAXP estándar, utilicé la biblioteca JDom para este propósito. Tiene una función de impresora, etc. opciones formateador http://www.jdom.org/
Suponiendo que desea seguir con el API estándar ...
Se puede usar un DOMImplementationLS:? Si el < xml version
Document document = node.getOwnerDocument();
DOMImplementationLS domImplLS = (DOMImplementationLS) document
.getImplementation();
LSSerializer serializer = domImplLS.createLSSerializer();
String str = serializer.writeToString(node);
= Codificación "1.0" = "UTF-16"? > declaración le molesta, se puede utilizar una vez transformer:
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();
Esta es la solución si obtiene [html: null] y esperaría el HTML. Agregó este comentario para que google pueda indexar la respuesta con suerte. –
Aún puede usar LSSerializer y producir "UTF-8". Use LSOutput con StringWriter en su lugar y establezca el tipo de codificación en "UTF- * 8" – ricosrealm
Funciona también con el objeto de documento w3c – thirdy
Si usted tiene el esquema del XML o de otro modo puede crear enlaces de JAXB para ello, se puede utilizar el JAXB Marshaller escribir en System.out:
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);
}
}
simple código de 4 líneas para conseguir String
sin xml-declaración (<?xml version="1.0" encoding="UTF-16"?>
) de org.w3c.dom.Element
DOMImplementationLS lsImpl = (DOMImplementationLS)node.getOwnerDocument().getImplementation().getFeature("LS", "3.0");
LSSerializer serializer = lsImpl.createLSSerializer();
serializer.getDomConfig().setParameter("xml-declaration", false); //by default its true, so set it to false to get String without xml-declaration
String str = serializer.writeToString(node);
Trate jcabi-xml con un trazador de líneas:
String xml = new XMLDocument(element).toString();
Con VTD-XML, puede pasar en el cursor y hacer una sola llamada getElementFragment para recuperar el segmento (como se expresa por su desplazamiento y la longitud) ... A continuación se muestra un ejemplo
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)));
}
}
}
esto es lo que se hace en jcabi:
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();
}
y funciona para mí!
- 1. java formato decimal cadena
- 2. ¿Cómo salgo de un ciclo while en Java?
- 3. ¿Cómo salgo de un bucle en Perl?
- 4. convertir la cadena EBCDIC al formato ASCII?
- 5. convertir cadena en formato java.util.date en java
- 6. Java concatenar para construir cadena o formato
- 7. Formato de cadena con número variable de argumentos en java
- 8. ¿Cómo salgo del programa en try/except?
- 9. ¿Cómo convierto una cadena al formato de dinero indio?
- 10. Cadenas de formato en java
- 11. ¿Cómo salgo de una aplicación mac programáticamente?
- 12. ¿Cómo salgo incondicionalmente de una aplicación Dart?
- 13. formato de cadena en C#
- 14. Formato de cadena en MySQL
- 15. Analizar cadena hasta la fecha con diferente formato en Java
- 16. USD formato de moneda en Java
- 17. ¿Cómo salgo de VIM al hacer una confirmación mercurial en la línea de comando?
- 18. pitón, cadena de formato
- 19. Java Doble a la cadena de conversión sin formato
- 20. ¿Cómo salgo de la ventana de texto en Git?
- 21. Cómo convertir .NET cadena de formato estándar a cadena de formato de Excel
- 22. de formato de cadena en notación científica
- 23. ¿Cómo salgo de un bucle foreach en C#?
- 24. Generar salida de formato formateado en Java
- 25. Cadena de formato dinámicamente
- 26. escapando caracteres de formato en java String.format
- 27. Cadena de formato en python con formato variable
- 28. Android: formato de fecha en una cadena
- 29. Cadena de formato de moneda en asp.net
- 30. php formato sprintf cadena
+1 para que no sea la intención de la API org.w3c.dom estándar. Si estoy interesado en bloques de XML como texto, generalmente trato de analizarlo como texto con una coincidencia de expresiones regulares (si los criterios de búsqueda se representan fácilmente como expresiones regulares). –