2012-05-02 23 views
8

tôi đang cố gắng để tạo ra một đơn giản XML Template mà cho đến nay chỉ bao gồm:StringTemplate nhân vật không hợp lệ '<' khi đọc mẫu XML

<?xml version="1.0"?> 

Tôi đọc các tập tin như thế này:

STGroup group = new STGroupDir("templates"); 
    ST st = group.getInstanceOf("report"); 
    st.add("analysis", ana); 
    String result = st.render(); 
    System.out.println(result); 

Và kết quả là một số thông báo lỗi:

report.st 1:1: invalid character '<' 
report.st 1:1: invalid character '?' 
report.st 1:19: invalid character '?' 
report.st 1:20: invalid character '>' 
report.st 1:2: no viable alternative at input 'xml' 

Tôi đã thấy những người khác đọc tempaltes HTML cũng sử dụng thẻ. Vậy tôi đang làm gì sai?

+0

Đó là rỗng: bạn chỉ cần đã tuyên bố loại tài liệu. –

+0

Hãy thử sử dụng thanh tra [http://www.antlr.org/wiki/display/ST4/StringTemplate+Inspector+GUI](http://www.antlr.org/wiki/display/ST4/StringTemplate+Inspector+GUI) –

+0

Không mong đợi tệp xml làm đầu vào. Xem cú pháp tại [http://www.antlr.org/wiki/display/ST4/StringTemplate+cheat+sheet](http://www.antlr.org/wiki/display/ST4/StringTemplate+cheat+sheet). –

Trả lời

4

Ok có vẻ như tôi đã bỏ qua rằng bạn cần chỉ định các mẫu trong một snytax khác. Allthough này là không rõ ràng từ các ví dụ tôi đã sử dụng:

mẫu làm việc của tôi trông khác bây giờ:

report (analysis) ::= << 
<?xml version="1.0"?> 
>> 

Bên cạnh đó tôi cũng đã thay đổi delimeters:

STGroup group = new STGroupDir("templates",'$','$'); 
+0

Đó là những gì tôi đã nói với bạn khi nói rằng nó không mong đợi xml cả. –

+0

Nếu bạn muốn một cái gì đó với một mẫu mà thực sự là một mẫu, nhìn vào freemarker. –

+2

Vâng. Allthough Terrence Parr nói rằng StringTemplate là mô hình tốt/tách tách, tôi không thể tưởng tượng một nhà thiết kế có thể được bohtered để viết mẫu cho việc này. – er4z0r

2

Tôi đã phát hiện ra rằng bạn cũng có thể thoát khỏi khung góc:

report(analysis) ::= << 
\<?xml version="1.0"?> 
>> 

Lưu ý \ ri ght trước <?xml - ngoài ra nó đủ thông minh để không yêu cầu một lối thoát khác tại khung đóng chốt ?>. Và tôi tin những gì Terrence Parr đề xuất về tách mô hình/xem là quan điểm không bao giờ thực sự có cơ hội thao tác cấu trúc dữ liệu cơ bản (hoặc mô hình) được truyền cho mẫu. Điều này được thực hiện bằng cách "áp dụng" một mẫu cho dữ liệu hoặc tập hợp, thay vì lặp trong mẫu trên dữ liệu. Có lẽ đó là tinh tế, và có lẽ thực tế (trong trường hợp của các nhà thiết kế) một chút quá tinh khiết.

+0

Điều này tiếp cận làm việc như một say mê cho tôi (Tôi đang sử dụng StringTemplate 4.0.8). Tôi đang bỏ phiếu vì đôi khi có thể dễ dàng thêm dấu gạch chéo ngược vào mẫu thay vì tìm kiếm ký tự không sử dụng. – cleberz

Các vấn đề liên quan