생성 된 XML에서 'standalone =“yes”'제거
결과 XML에서 standalone = "yes" 가 생성 되지 않도록하는 JAXB 설정을 알고 있습니까?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.FALSE);
없는 데 사용할 수 있습니다
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
그러나 나는이 모범 사례를 고려하지 않을 것입니다.
JDK1.6의 일부인 JAXB에서
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
사용할 수 있습니다
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
또는
marshaller.setProperty("com.sun.xml.bind.xmlDeclaration", Boolean.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에 추가하여 standalone = "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_FRAGMENT 옵션을 'true'(기본 xml 처리 명령 생략)로 설정하고 XMLStreamWriter의 writeProcessingInstruction 메서드를 사용하여 직접 삽입 할 수 있습니다.
xmlStreamWriter.writeProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
jaxbMarshaller.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
jaxbMarshaller.marshal(object, xmlStreamWriter);
xmlStreamWriter.writeEndDocument();
다음을 사용할 수 있습니다. marshaller.setProperty ( "jaxb.fragment", Boolean.TRUE);
Java 8에서 나를 위해 작동합니다.
속성 예외가 발생하는 경우 다음 구성을 추가하십시오.
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);
나는 논평 할 "권한"을 가질만큼 충분히 높은 "평판"이 없다. ;-)
@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.PropertyException이 발생합니다.
단지 시도
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();
}
참고 URL : https://stackoverflow.com/questions/277996/remove-standalone-yes-from-generated-xml
'code' 카테고리의 다른 글
application.yml은 환경 변수를 지원합니까? (0) | 2020.10.14 |
---|---|
[여기에 선호하는 언어] 프로그램의 모든 변수를 열거하거나 나열합니다. (0) | 2020.10.14 |
파일을 byte []로 변환하는 안정적인 방법 (0) | 2020.10.13 |
UIImageView-할당 된 이미지의 파일 이름을 얻는 방법은 무엇입니까? (0) | 2020.10.13 |
'기기는 x86을 지원하지만 APK는 armeabi-v7a 만 지원'오류의 이유는 무엇입니까? (0) | 2020.10.13 |