[xml] 유효한 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 문서입니다 의미한다.

에 있습니다 선언 XMLencodingstandalone모두 선택 사항입니다. 만은 version필수입니다. 또한 속성이 아니므로 존재하는 경우 순서대로 있어야합니다 : version, any encoding, any 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 비트 인코딩이 발견되면 자동 감지가 작동하지 않습니다. 가능하면 생성하지 마십시오.

standaloneXML 문서가 올바르게 DTD없이 여부를 처리 할 수 있는지 여부를 나타냅니다. 사람들은 거의 사용하지 않습니다. 요즘에는 DTD없이 정보가 누락 된 XML 형식을 디자인하는 것은 좋지 않습니다.

최신 정보:

“프롤로그 오류 / 잘못된 utf-8 인코딩”오류는 파서가 파일 내에서 찾은 실제 데이터가 XML 선언에 명시된 인코딩과 일치하지 않음을 나타냅니다. 또는 파일 내부의 데이터가 자동 감지 된 인코딩과 일치하지 않는 경우도 있습니다.

파일에 BOM (byte-order-mark)이 포함되어 있으므로 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(이 예에 있음).


답변