유효한 XML 파일에 XML 선언이 필요합니까?
Xerces의 Sax Parser를 사용하여 XML 파일을 파싱하고 있습니다.
XML 선언이<?xml version="1.0" encoding="UTF-8"?>
꼭 필요한?
XML 1.0에서 XML 선언은 선택 사항입니다.XML 1.0 권장사항의 섹션 2.8을 참조하십시오. 여기에는 "사용해야 한다"고 나와 있으므로 권장 사항이지만 필수 사항은 아닙니다.그러나 XML 1.1에서는 선언이 필수입니다.XML 1.1 권장 사항의 섹션 2.8을 참조하십시오. 여기에 "MUST"를 사용하도록 명시되어 있습니다.또한 선언이 없는 경우 문서가 XML 1.0 문서임을 자동으로 암시합니다.
XML 선언에서 주의할 점은 다음과 같습니다.encoding
그리고.standalone
둘 다 선택 사항입니다.온리 더version
필수 사항.또한 이러한 속성은 속성이 아니므로 해당 속성이 있는 경우 다음 순서에 따라야 합니다.version
, 그 다음은 아무 것이나encoding
, 그 다음은 아무 것이나standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
이런 방식으로 인코딩을 지정하지 않으면 XML 구문 분석기에서 사용되는 인코딩을 추측합니다.XML 1.0 권장 사항에서는 문자 인코딩을 자동으로 검색할 수 있는 한 가지 방법을 설명합니다.실제로 입력이 UTF-8, UTF-16 또는 US-ASCII로 인코딩된 경우 이는 큰 문제가 되지 않습니다.US-ASCII 범위 밖의 문자(예: ISO 8859-1)를 사용하는 8비트 인코딩이 발생하면 자동 감지가 작동하지 않습니다. 가능한 경우 이러한 인코딩을 만들지 마십시오.
그standalone
DTD 없이 XML 문서를 올바르게 처리할 수 있는지 여부를 나타냅니다.사람들은 거의 사용하지 않습니다.요즘에는 DTD 없이 정보가 누락된 XML 형식을 설계하는 것이 좋지 않습니다.
업데이트:
"prolog error/invalid utf-8 encoding" 오류는 구문 분석기가 파일 내부에서 찾은 실제 데이터가 XML 선언에서 말하는 인코딩과 일치하지 않음을 나타냅니다.또는 파일 내부의 데이터가 자동 탐지된 인코딩과 일치하지 않는 경우도 있습니다.
파일에 BOM(바이트 순서 표시)이 포함되어 있으므로 UTF-16 인코딩이어야 합니다.당신의 선언문에는<?xml version="1.0" encoding="UTF-8"?>
파일이 노트패드에 의해 UTF-16으로 변경되었을 때 이는 명백하게 잘못된 것입니다.간단한 해결책은 다음을 제거하는 것입니다.encoding
간단히 말하면,<?xml version="1.0"?>
. 다음과 같이 편집할 수도 있습니다.encoding="UTF-16"
하지만 원본 파일(UTF-16에는 없었다)이나 파일이 UTF-8이나 다른 인코딩으로 다시 변경되는 경우에는 잘못된 것입니다.
굳이 BOM을 제거하려고 하지 마십시오. 그것이 문제의 원인은 아닙니다.노트패드나 워드패드를 사용하여 XML을 편집하는 것이 진짜 문제입니다!
xml 선언은 선택 사항이므로 xml 선언 없이도 xml을 잘 구성할 수 있습니다.그러나 파서, 특히 사용된 인코딩에 대해 잘못된 가정이 이루어지지 않도록 사용하는 것이 좋습니다.
합니다에 하지 않는합니다.version
그리고.encoding
(당신이 그 예에 있는).
언급URL : https://stackoverflow.com/questions/7007427/does-a-valid-xml-file-require-an-xml-declaration
'programing' 카테고리의 다른 글
CSS로 긴 문자열 잘라내기: 아직 실현 가능합니까? (0) | 2023.10.09 |
---|---|
워드프레스 WXR로 디스크 XML 내보내기 주석을 가져오는 방법 (0) | 2023.10.09 |
XML을 java.util로 변환하는 방법지도와 그 반대? (0) | 2023.10.09 |
MySql은 선택한 결과를 삽입합니다. (0) | 2023.10.09 |
SpringBoot을 사용하여 개발된 REST API에서 Java Object에 매핑할 때 JSON payload 필드를 대소문자 구분 없이 만듭니다. (0) | 2023.10.09 |