org.w3c.dom.Element를 Java의 문자열 형식으로 출력하는 방법은 무엇입니까?
org.w3c.dom.Element
내 메서드에 전달 된 개체가 있습니다. 하위 노드 (전체 개체 그래프)를 포함하여 전체 xml 문자열을 확인해야합니다. 내가 할 수 Element
있는 xml 형식 문자열로 변환 할 수있는 방법을 찾고 있어요 System.out.println
. 그냥 println()
'요소'개체에없는 일 때문에 것이다 toString()
출력하지 XML 형식과 그 자식 노드를 통해 가지 않을 것입니다. 내 자신의 방법을 작성하지 않고 쉽게 할 수 있습니까? 감사.
표준 API를 고수하고 싶다고 가정합니다.
DOMImplementationLS를 사용할 수 있습니다 .
Document document = node.getOwnerDocument();
DOMImplementationLS domImplLS = (DOMImplementationLS) document
.getImplementation();
LSSerializer serializer = domImplLS.createLSSerializer();
String str = serializer.writeToString(node);
<? xml version = "1.0"encoding = "UTF-16"?> 선언이 신경 쓰이는 경우 대신 변환기 를 사용할 수 있습니다 .
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();
String
xml-declaration ( <?xml version="1.0" encoding="UTF-16"?>
) 없이 얻을 수있는 간단한 4 줄 코드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);
XML 스키마가 있거나 이에 대한 JAXB 바인딩을 만들 수있는 경우 JAXB Marshaller를 사용하여 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);
}
}
표준 JAXP API에서 지원되지 않는이 목적으로 JDom 라이브러리를 사용했습니다. 프린터 기능, 포맷터 옵션 등이 있습니다. http://www.jdom.org/
하나의 라이너로 jcabi-xml 을 사용해보십시오 .
String xml = new XMLDocument(element).toString();
으로 VTD-XML , 커서로 전달할 수 (오프셋 및 길이는로 표시로) 세그먼트를 검색하는 하나의 getElementFragment 통화를 ... 다음은 예입니다
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("/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)));
}
}
}
이것은 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();
}
그리고 그것은 나를 위해 작동합니다!
'Programing' 카테고리의 다른 글
로그 파일 및 콘솔에 출력 쓰기 (0) | 2020.09.18 |
---|---|
Django 템플릿에서 사용자 프로필에 액세스하는 방법은 무엇입니까? (0) | 2020.09.18 |
HttpRequestBase를 HttpRequest 객체로 어떻게 변환합니까? (0) | 2020.09.18 |
푸시 알림없이 iOS 배지 업데이트 (0) | 2020.09.18 |
Windows를 사용하는 R의 파일 경로 문제 ( "문자열의 16 진수"오류) (0) | 2020.09.18 |