xdmNode를 dom 노드로 변환하고 싶습니다. createEventCountsTestDocument
는 다음과 같은 XML을 기반으로 문서 생성색슨 : xdmNode를 org.w3c.dom.Node로 변환하십시오.
Processor proc = new Processor(false);
XPathCompiler xpath = proc.newXPathCompiler();
Document doc = DocumentUtilities.createEventCountsTestDocument();
XdmNode xdmNode = proc.newDocumentBuilder().wrap(doc);
expression = "/caseFileModel/EventCount/EventCountEvents[EventCmmnId=\"_4cd9cdaabbd244548a32afcd4cf2e1c0\" and EventEventType=\"CREATE\"]/Timestamps/Date[last()]";
value = xpath.evaluate(expression, xdmNode);
XdmNode node = (XdmNode) value;
Node element = ((Node) node.getExternalNode());
System.out.println(element.getTextContent());
:
<caseFileModel>
</EventCountEvents>
<EventCountEvents>
<EventCmmnId>_8dbe1b3fa1a04787b2ef35d153d93ae5</EventCmmnId>
<EventEventType>CREATE</EventEventType>
<EventCount>1</EventCount>
<Timestamps>
<Date>2017-03-13T16:47:04Z</Date>
</Timestamps>
</EventCountEvents>
<EventCountEvents>
<EventCmmnId>_4cd9cdaabbd244548a32afcd4cf2e1c0</EventCmmnId>
<EventEventType>CREATE</EventEventType>
<EventCount>1</EventCount>
<Timestamps>
<Date>2017-03-13T16:47:04Z</Date>
</Timestamps>
</EventCountEvents>
</EventCount>
</caseFileModel>
내가 올바른 출력, 즉 2017-03-03T12:00:00Z
그러나 element
이 com.sun.org.apache.xerces.internal.dom.DeferredElementImpl
아닌 w3c.dom.Node
입니다 얻을 나는 다음과 같은 부분적인 해결책을 발견했다. 즉, element.getNodeValue()
으로 전화하면 null
을 반환합니다. element.getFirstChild().getNodeValue()
으로 전화하면 정확한 값 2017-03-03T12:00:00Z
가 반환됩니다. 그래서 뭔가 잘못된 것으로 보이지만 그것을 찾을 수 없습니다. xdmNode
을 w3c.dom.Node
으로 변환하고 DeferredElementImpl
으로 변환하는 방법을 찾고 싶습니다.
문제가 무엇인지 이해하지 못합니다. DOM https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-F68D080은 요소 노드의 노드 값을 다음과 같이 정의합니다. 올바른 결과를 얻으려면 null이되어야합니다. 'Node'는'com.sun.org.apache.xerces.internal.dom.DeferredElementImpl'에 의해 구현 된 인터페이스입니다. 원하는 결과가 어떤 것인지 잘 모르겠습니다. 클래스 기반 객체 모델을 원한다면 Java 세계에서 JDOM 또는 XOM을 사용하십시오. DOM은 정의에 따라 클래스가 구현할 인터페이스를 제공합니다. –