오류 : "[xX] [mM] [lL]"과 일치하는 처리 명령 대상이 허용되지 않습니다.


181

이 오류는

"[xX] [mM] [lL]"과 일치하는 처리 명령 대상이 허용되지 않습니다.

다음과 같이 시작하는 XSLT 페이지를 실행할 때마다 발생합니다.

<?xml version="1.0" encoding="windows-1256"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:include href="../header.xsl"/>
  <xsl:template match="/">
    <xsl:call-template name="pstyle"/>
    <xsl:call-template name="Validation"/>
    <xsl:variable name="strLang">
      <xsl:value-of select="//lang"/>
    </xsl:variable>
    <!-- ////////////// Page Title ///////////// -->
    <title>
        <xsl:value-of select="//ListStudentFinishedExam.Title"/>
    </title>

참고 : 첫 번째 줄 전에 선행 공백을 제거했지만 여전히 오류가 발생합니다!


1
이 오류는 XSLT에만 국한되지 않습니다. 일반적으로 XML 구문 분석과 관련이 있습니다. 아래의 답변에 나열된 세 가지 가능성 각각에 대해 기본 XSLT 파일뿐만 아니라 포함 / 가져온 XSLT 파일 ( ../header.xsl)과 변환중인 XML 입력 문서 를 확인하십시오 .
kjhughes

답변:


365

Xerces 기반 도구는 다음 오류를 발생시킵니다

The processing instruction target matching "[xX][mM][lL]" is not allowed.

XML 파일이 아닌 다른 곳 에서 XML 선언 이 발견 될 때

유효한 진단 메시지입니다. 다른 XML 파서는이 상황에서 유사한 오류 메시지를 발행해야합니다.

문제를 해결하려면 다음 가능성을 확인하십시오.

  1. 선언 하기 전에 빈 공간이나 다른 보이는 내용이 있습니다<?xml ?> .

    해결 : XML 선언 전에 공백 또는 기타 보이는 내용을 제거하십시오.

  2. 일부 눈에 보이지 않는 내용이 이전에 존재 <?xml ?> 선언. 가장 일반적으로 이것은 BOM (Byte Order Mark) 입니다.

    해결 : BOM의 W3C 페이지에서 제안한 것과 같은 기술을 사용 하여 BOM을 HTML로 제거하십시오.

  3. 잃은 <?xml ?>선언은 XML 컨텐츠 내에서 존재한다. 이는 프로그래밍 방식으로 또는 잘라 내기 및 붙여 넣기를 통해 XML 파일을 결합 할 때 발생할 수 있습니다. <?xml ?>XML 파일에는 선언 이 하나만있을 수 있으며 맨 위에 만있을 수 있습니다.

    해결 : <?xml대소 문자를 구분하지 않고 검색 하고 파일에서 최상위 XML 선언을 제외한 모든 것을 제거하십시오.


흩어진 <? xml의 경우 실제로 xml 파일을 반복하여 찾는 방법은 무엇입니까? 색소폰이나 stax 파서와 같은 것을 사용하는 것처럼 잘 작동합니다 (stax로 시도했지만 인식하지 못합니다)
user2062207

길잃은 XML 선언을 제거하기 위해, 당신은 별도의 XML 선언되는 XML을 방지하기 때문에, 텍스트가 아닌 XML로 파일을 치료해야 잘 형성 . 텍스트 편집기를 사용하거나 프로그래밍 방식으로 파일을 열고 텍스트 로 조작 하여 XML 파일로 취급 하기 전에 스트레이 <?xml ?>선언 을 제거 하십시오.
kjhughes

4
간헐적 인 문제는 디버깅하기 어려운 것으로 악명이 높습니다. 그러나, 나는이 오류가 있음을 알려보다 자세한 내용은 여기를 서로 도울 수 확실히 결정 : 것입니다 항상 두 번 이상 표시하는 XML 선언에 대한 오류 일 또는 XML 파일의 맨 외의 위치. 행운을 빕니다.
kjhughes

1
XML 메시지가 문자열로 저장된 경우 SAX 파서에 전달하기 전에 문자열에서 trim ()을 수행 할 수 있습니다. 어떤 이유로 나는 시작시 여분의 공백을 도입하는 XML 응답을 얻었으며 구문 분석 할 때 위의 Xerces 오류가 발생했습니다.
Robert Casey

1
오래된 스레드이지만 누군가에게 도움이 될 수 있습니다. 브라우저에서 xml 파일을 수동으로 복사하고 로컬 텍스트 파일에 붙여 넣기 및 xml로 저장 한 후 동일한 오류가 발생했습니다 (문제의 파일은 pom.xml 및 오류 gradle에서 빌드하는 동안 수신되었습니다). <? xml> 태그 이전에도 xml 파일의 맨 위에 빈 줄이 있다는 것을 알았습니다.
JavaTec

13

나를위한 이유는 하나의 XML에서 다음 코드 중 2 개입니다.

<?xml version="1.0" encoding="utf-8"?>

2
<? xml 버전 앞의 공백을 제거하면 효과가 있습니다.
xpagesbeast

1
이 답변은 이미 제공되었습니다 : # 3 : 해결 : 대소 문자를 구분하지 않고 검색 <?xml하고 파일에서 최상위 XML 선언을 제외한 모든 것을 제거하십시오.
kjhughes

누군가 복사 및 붙여 넣기를 엉망으로 만들 수 있습니다.
fl0w

3

자동 생성 된 저작권 메시지 XML<resources>태그 앞에 빈 줄 이 있었는데 , 일단 제거하면 빌드가 성공했습니다.

여기에 이미지 설명을 입력하십시오


1
XML 선언 전에 주석 또는 공백 제거하면이 오류가 제거 될 수 있지만 이미지에 표시된 문서의 경우 XML 선언 주석 또는 빈 줄을 제거 할 필요가 없습니다 .
kjhughes

1

위의 오류의 또 다른 이유는 jar 파일이 손상 되었기 때문입니다. 단위 테스트를 실행할 때 Junit에 대해 동일한 오류가 발생했습니다. jar을 제거하고 다시 다운로드하면 문제가 해결됩니다.


0

내 경우에는 구성 파일의 경로가 잘못되었습니다 : 파일을 찾을 수 없습니다 (경로가 잘못되었습니다).이 예외가 발생했습니다.

입력 스트림에서 구성하는 중 오류가 발생했습니다. 초기 원인은 "[xX] [mM] [lL]"과 일치하는 처리 명령 대상이 허용되지 않았습니다.


0

5,000 개의 디렉토리 (Project Gutenberg 카탈로그 파일)에 50,000 개의 rdf / xml 파일과 비슷한 문제가 있습니다. 나는 폭동으로 그것을 해결했다 (제나 배포판에서)

디렉토리는 cache / epub / NN / nn.rdf입니다 (여기서 NN은 숫자 임)

모든 파일이있는 디렉토리 위의 디렉토리 (예 : 캐시)

riot epub/*/*.rdf --output=turtle > allTurtle.ttl

이것은 많은 경고를 생성하지만 결과는 jena에로드 할 수있는 형식입니다 (fuseki 웹 인터페이스 사용).

놀랍도록 간단합니다 (적어도이 경우).


0

PHP의 경우 XML 인쇄를 시작하기 전에 다음 코드를 입력하십시오.

while(ob_get_level()) ob_end_clean();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.