생성된 XML에서 'standalone="yes" 제거
결과 XML에서 독립 실행형="yes"가 생성되지 않도록 하는 JAXB 설정을 알고 계십니까?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
JDK1.6의 일부인 JAXB에서
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
이 속성:
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false);
...no가 없을 때 사용할 수 있습니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
하지만 저는 이 최선의 방법이라고 생각하지 않습니다.
사용하실 수 있습니다.
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
아니면
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", false)
기본 XML 선언을 사용하지 않도록 설정한 다음 사용자 지정 XML 선언을 추가합니다.
<?xml version="1.0" encoding="UTF-8"?>
타고
marshaller.setProperty("com.sun.xml.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
생성된 xml로 이동하므로 독립 실행형="yes" 속성을 피할 수 있습니다.
만약 다른 사람이 여전히 이 문제와 싸우고 있다면, 당신은 사용을 고려할 수 있습니다.
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
XML 선언문을 모두 삭제하고 자신의 것만 적습니다.String
출력 스트림/방법의 시작에
문서를 종속적으로 만드는 경우DOCTYPE
(예: 명명된 엔티티 사용) 그러면 독립 실행형이 중지되므로standalone="yes"
XML 선언에서는 허용되지 않습니다.
그러나 독립 실행형 XML은 어디에서나 사용할 수 있는 반면 외부를 로드하지 않는 XML 파서에서는 비독립 실행형이 문제가 됩니다.
XML을 지원하지 않는 소프트웨어와 상호 운용성이 문제가 될 수 있는 것 외에는 이 선언이 어떻게 문제가 될 수 있는지 모르겠습니다.
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>");
이것은 JDK1.7과 함께 작동했습니다. standalone=\"no\"를 제거하여 xml 부분의 나머지 부분만 가져올 수 있습니다.
기본 javax.xml 패키지만 사용하는 경우 JAXB_를 설정할 수 있습니다.마샬러의 FRAMGATION 옵션을 'true'(기본 xml 처리 명령이 생략됨)로 설정하고 XML StreamWriter의 writeProcessingInstrument 메서드를 사용하여 다음과 같이 입력합니다.
xmlStreamWriter.writeProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
jaxbMarshaller.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.marshal(object, xmlStreamWriter);
xmlStreamWriter.writeEndDocument();
해보기만 하면 됩니다
private String marshaling2(Object object) throws JAXBException, XMLStreamException {
JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
StringWriter writer = new StringWriter();
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
jaxbMarshaller.marshal(object, writer);
return writer.toString();
}
Java 1.8과 JAXB 2.3.1을 사용하고 있습니다.
먼저 pom.xml에서 java 1.8을 사용해야 합니다.
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
그 다음 소스 코드에서 사용했습니다: (키는 내부 부품이었습니다.)
// remove standalone=yes
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
마샬러.setProperty("jaxb.fragment"), Boolean 등을 사용할 수 있습니다.TRUE);
자바 8에서도 잘 통합니다.
저는 댓글을 달 수 있는 "특권"을 가질 만큼 "평판"이 높지 않습니다. ;-)
@Debasis, 지정한 속성:
"com.sun.xml.internal.bind.xmlHeaders"
다음이 되어야 합니다.
"com.sun.xml.bind.xmlHeaders" (without the "internal", which are not meant to be used by the public)
당신처럼 "내부" 속성을 사용하면 javax.xml.bind를 얻을 수 있습니다.속성 예외
속성 예외가 발생하는 경우 다음 구성을 추가합니다.
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
jaxbMarshaller.setProperty("com.sun.xml.internal.bind.xmlDeclaration", Boolean.FALSE);
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
있다면<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
하지만 이것을 원합니다.<?xml version="1.0" encoding="UTF-8"?>
그냥 하기:
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
marshaller.setProperty("com.sun.xml.internal.bind.xmlHeaders", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
언급URL : https://stackoverflow.com/questions/277996/remove-standalone-yes-from-generated-xml
'programing' 카테고리의 다른 글
PHP PDO 준비문 -- MySQL LIKE 쿼리 (0) | 2023.09.20 |
---|---|
libc static과 다른 라이브러리를 동적으로 연결하는 GCC, 재검토? (0) | 2023.09.20 |
대용량 파일을 처리할 수 있는 Lightweight XML Viewer (0) | 2023.09.20 |
문자열 길이에 따라 문자열 데이터 필터링 (0) | 2023.09.20 |
asp.net mvc 4에서 jquery ajax 호출 후 서버측 리디렉션 (0) | 2023.09.20 |