Lỗi: Không cho phép mục tiêu hướng dẫn xử lý khớp với [xX] [mM] [lL].


181

Lỗi này,

Không cho phép mục tiêu hướng dẫn xử lý khớp "[xX] [mM] [lL]"

xảy ra bất cứ khi nào tôi chạy một trang XSLT bắt đầu như sau:

<?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>

Lưu ý : Tôi đã xóa bất kỳ khoảng trắng hàng đầu nào trước dòng đầu tiên, nhưng lỗi vẫn xảy ra!


1
Lỗi này không đặc biệt đối với XSLT; nó liên quan đến phân tích cú pháp XML nói chung. Kiểm tra không chỉ tệp XSLT chính của bạn, mà còn bất kỳ tệp XSLT được nhập / nhập ( ../header.xslcũng như tài liệu đầu vào XML nào được chuyển đổi, cho từng trong ba khả năng tôi liệt kê trong câu trả lời của tôi dưới đây .
kjhughes

Câu trả lời:


365

Các công cụ dựa trên Xerces sẽ phát ra lỗi sau

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

khi gặp phải một khai báo XML ở bất kỳ nơi nào khác ngoài đầu tệp XML.

Đây là một thông điệp chẩn đoán hợp lệ; các trình phân tích cú pháp XML khác sẽ đưa ra một thông báo lỗi tương tự trong tình huống này.

Để khắc phục sự cố, kiểm tra các khả năng sau:

  1. Một số không gian trống hoặc nội dung hiển thị khác tồn tại trước khi khai báo.<?xml ?>

    Độ phân giải : xóa khoảng trống hoặc bất kỳ nội dung hiển thị nào khác trước khi khai báo XML.

  2. Một số nội dung vô hình tồn tại trước khi <?xml ?> tuyên bố. Thông thường nhất đây là Dấu hiệu đơn hàng Byte (BOM) .

    Giải pháp : Loại bỏ BOM bằng các kỹ thuật như các kỹ thuật được đề xuất bởi trang W3C trên BOM trong HTML.

  3. Một tuyên bố đi lạc <?xml ?>tồn tại trong nội dung XML. Điều này có thể xảy ra khi các tệp XML được kết hợp theo chương trình hoặc thông qua cắt và dán. Chỉ có thể có một <?xml ?>khai báo trong tệp XML và nó chỉ có thể ở trên cùng.

    Giải pháp : Tìm kiếm <?xmltheo cách không phân biệt chữ hoa chữ thường và xóa tất cả trừ phần khai báo XML hàng đầu khỏi tệp.


Đối với một <? Xml đi lạc, bạn thực sự sẽ đi về việc lặp qua tệp xml để tìm nó như thế nào? Giống như sử dụng một cái gì đó như sax hoặc stax Parsers hoạt động tốt (đã thử làm nó với stax nhưng nó không nhận ra nó)
user2062207

Để loại bỏ khai báo XML đi lạc, bạn phải coi tệp là văn bản, không phải XML, bởi vì một khai báo XML bổ sung ngăn không cho XML được định dạng tốt . Sử dụng trình soạn thảo văn bản hoặc mở tệp theo chương trình và vận hành trên đó dưới dạng văn bản để loại bỏ <?xml ?>khai báo đi lạc trước khi coi nó là tệp XML.
kjhughes

4
Bạn có cảm tình của tôi vì các vấn đề không liên tục nổi tiếng là khó gỡ lỗi. Tuy nhiên, tôi không thể giúp nhiều hơn từ đây ngoài việc nói với bạn rằng lỗi này chắc chắncó tính xác định : Sẽ luôn là một lỗi khi một khai báo XML xuất hiện nhiều hơn một lần hoặc bất kỳ nơi nào khác ngoài đầu tệp XML. Chúc may mắn.
kjhughes

1
Nếu thông điệp XML của bạn được lưu trữ dưới dạng Chuỗi, bạn có thể thử thực hiện cắt () trên Chuỗi trước khi chuyển nó đến Trình phân tích SAX của bạn. Vì một số lý do, tôi đã nhận được các phản hồi XML giới thiệu thêm khoảng trắng khi bắt đầu, dẫn đến lỗi Xerces ở trên khi được phân tích cú pháp.
Robert Casey

1
Đây là một chủ đề cũ, nhưng điều này có thể giúp được ai đó: Sau khi sao chép thủ công tệp xml từ trình duyệt và sao chép dán vào tệp văn bản cục bộ và lưu dưới dạng xml, chúng tôi đã gặp lỗi tương tự (tệp được đề cập là pom.xml và lỗi đã được nhận trong khi thực hiện xây dựng trên lớp). Chúng tôi phát hiện ra rằng có một dòng trống ở đầu tệp xml, ngay cả trước thẻ <? Xml>, đã xóa nó và nó hoạt động!
JavaTec

13

Lý do cho tôi là 2 mã sau trong một xml

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

2
Tôi xóa khoảng trắng trước các phiên bản <? Xml ... và điều đó hiệu quả với tôi.
xpagesbeast

1
Câu trả lời này đã được cung cấp : # 3: Độ phân giải : Tìm kiếm <?xmltheo cách không phân biệt chữ hoa chữ thường và xóa tất cả trừ phần khai báo XML hàng đầu khỏi tệp.
kjhughes

Có thể xác nhận, ai đó đã làm hỏng bản sao và dán.
fl0w

3

Có tự động tạo thông báo Bản quyền trong XMLmột dòng trống trước <resources>thẻ, khi tôi xóa nó, bản dựng của tôi đã thành công.

nhập mô tả hình ảnh ở đây


1
Xóa các nhận xét hoặc khoảng trắng trước khi khai báo XML có thể loại bỏ lỗi này, nhưng đối với tài liệu hiển thị trong hình ảnh của bạn, không cần phải xóa nhận xét hoặc dòng trống sau khi khai báo XML.
kjhughes

1

Một lý do khác của lỗi trên là tệp jar bị hỏng. Tôi đã gặp lỗi tương tự nhưng đối với Junit khi chạy thử nghiệm đơn vị. Loại bỏ jar và tải xuống một lần nữa khắc phục vấn đề.


0

trong trường hợp của tôi là một đường dẫn sai trong tệp cấu hình: không tìm thấy tệp (đường dẫn bị sai) và nó xuất hiện với ngoại lệ này:

Lỗi cấu hình từ luồng đầu vào. Nguyên nhân ban đầu là Không phù hợp với mục tiêu hướng dẫn xử lý "[xX] [mM] [lL]".


0

Tôi gặp vấn đề tương tự với 50.000 tệp rdf / xml trong 5.000 thư mục (tệp danh mục Project Gutenberg). Tôi đã giải quyết nó bằng bạo loạn (trong bản phân phối jena)

thư mục là cache / epub / NN / nn.rdf (trong đó NN là một số)

trong thư mục phía trên thư mục chứa tất cả các tệp, tức là trong bộ đệm

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

Điều này có thể tạo ra nhiều cảnh báo nhưng kết quả là ở định dạng có thể được tải vào jena (sử dụng giao diện web fuseki).

đơn giản đáng ngạc nhiên (ít nhất là trong trường hợp này).


0

Đối với PHP, hãy đặt dòng mã này trước khi bạn bắt đầu in XML của mình:

while(ob_get_level()) ob_end_clean();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.