2009-06-11 33 views
10

Tôi đã được cung cấp một tệp XML mẫu (cuối cùng khách hàng của tôi sẽ nhận được một số tệp này mỗi ngày) và tệp XSLT sẽ chuyển XML thành một thứ có bố cục có ý nghĩa, phù hợp để hiển thị trong trình duyệt hoặc in.Làm cách nào để hiển thị XML bằng tài liệu XSLT, trong ứng dụng Delphi?

Tôi muốn đặt thứ gì đó vào ứng dụng Delphi cũ, như vậy người dùng có thể chọn một trong các tệp XML từ ổ đĩa và 'hiển thị' nó (trong TWebBrowser hoặc tương tự).

Tôi không biết bắt đầu từ đâu, và Googling delphi, xml và xslt lấy cho tôi các ví dụ có vẻ là datamodule/database based; Tôi chỉ muốn chuyển đổi một tệp XML đã cho thành một thứ gì đó trên màn hình. Dường như nó có thể liên quan đến một PageProducer nhưng tôi không thể có được đầu của tôi xung quanh những gì tôi cần phải làm. Bất cứ ai cung cấp bất kỳ con trỏ, hoặc có thể là một liên kết đến một hướng dẫn nhanh?

Rất cám ơn!

+0

Ok, điều này đã khơi gợi một số sự quan tâm từ một vài lập trình viên Delphi vì vậy tôi sẽ làm một điểm trở lại đây trong vài ngày tới và đăng một ví dụ về cách tôi làm việc đó (khi tôi làm). :-) – robsoft

+0

Mẹo của Kieveli về việc thêm tham chiếu biểu định kiểu trong tài liệu thực sự hữu ích, vì nó đã tiết kiệm thời gian khi kiểm tra và kiểm tra mọi thứ. Mẹo của Ken đã thực hiện thủ thuật, có tính đến sự thay đổi được ghi nhận trong các bình luận của anh. – robsoft

Trả lời

9
Uses 
    XMLDoc, XMLIntf; 

function Transform(XMLContent : string; XSLContent : string) : WideString; 
var 
    XML : IXMLDocument; 
    XSL : IXMLDocument; 
begin 

    XML := LoadXMLData(XMLContent); 
    XSL := LoadXMLData(XSLContent); 

    XML.DocumentElement.TransformNode(XSL.DocumentElement, Result) 

end; 
+0

Không thể lấy định dạng mẫu mã để hoạt động. Tôi đang sử dụng IE 8. Có lẽ đó là lý do? –

+1

Trong ví dụ trên, XMLContent là XML bạn sẽ nhận và XSLContent là XSLT. Chúng tôi sử dụng điều này để tạo ra các trang HTML từ các mẫu tài liệu XML. Nhưng đầu ra là bất cứ thứ gì XSLT tạo ra. Không cần các thành phần của bên thứ ba. Sử dụng trình phân tích cú pháp XML Delphi mặc định. (MSXML) –

+0

Chỉ cần giúp đỡ bất cứ ai: Tôi đã sử dụng nó và nó cần tôi gọi CoInitialize (nil) trước khi gọi hàm transform và gọi CoUnInitialize(); sau khi giải phóng bộ nhớ. Để sử dụng các chức năng này, bạn cần phải thêm ActiveX và Windows vào mệnh đề sử dụng. – Jonathan

6

Tôi đã sử dụng thư viện MSXML để thực hiện phép chuyển đổi XSLT trong Delphi. Đã lâu lắm rồi. Làm việc như người ở!

Tôi không chắc định dạng XSLT đầu ra của bạn sẽ tạo ra, nhưng biết điều đó sẽ giúp bạn tìm ra cách hiển thị nó. Chúng tôi đã tạo HTML từ XML qua XSLT và hiển thị nó bằng cách sử dụng điều khiển Trình duyệt web ActiveX (IE) trên một ngăn trong ứng dụng của chúng tôi.

Đây là một số link on MSSXML and Delphi có thể hữu ích.

BTW: Nếu đây là lần đầu tiên bạn làm việc với XSLT, bạn có thể chỉnh sửa thủ công tệp XML và thêm chỉ thị để hiển thị nó bằng XSLT cụ thể. Khi bạn mở XML trong Firefox sau khi chỉnh sửa, XSLT sẽ được áp dụng, và nó sẽ cho bạn thấy những gì sẽ là đầu ra của các cuộc gọi MSXML của bạn. Đây là dòng bạn thêm bằng tay để xml:

<?xml-stylesheet type="text/xsl" href="myStyleSheet.xsl"?> 
+0

Cảm ơn vì điều này! Khi tôi chỉnh sửa tài liệu XML như bạn đề xuất, tôi có một sự thay đổi về ngoại hình nhưng rõ ràng là không sử dụng thông tin trong tài liệu XSLT đúng cách; Tôi tự hỏi nếu họ không thực sự phù hợp và vì vậy việc chuyển đổi không hoạt động bởi vì nó không tìm thấy các thực thể mà XSLT đề cập đến. Tôi sẽ quay trở lại khách hàng và yêu cầu trợ giúp thêm một chút. Cảm ơn đã giúp tôi bắt đầu, mặc dù thực sự đánh giá cao nó. – robsoft

+0

_ "và nó sẽ cho bạn thấy những gì sẽ là đầu ra của MSXML của bạn gọi" _ >> không, khi bạn áp dụng stylesheet của bạn theo cách đó và hiển thị nó thông qua Firefox, ** [TransformiiX] (https: //en.wikipedia .bộ xử lý org/wiki/TransforMiiX) được sử dụng, không phải MSXML. ** – Abel

2

Nếu bạn chỉ cần biến đổi, bạn có thể sử dụng TXMLDocument, lưu vào đĩa và hơn hiển thị kết quả trong một TWebBrowser (thông qua Navigate('file:///...')).

Cá nhân tôi có một số vấn đề với MSXML nên tôi bắt đầu sử dụng DIXML.

+0

+1 cho liên kết DIXML, trông rất hữu ích. Tôi đã không khám phá vấn đề này đúng nhưng tôi hy vọng tôi có thể làm một cái gì đó đơn giản chỉ với một vài thành phần tiêu chuẩn - vì vậy cảm ơn cho đề nghị! – robsoft

1

Bạn có thể thử cài đặt AltovaXML, có thể gọi là COM +. Nó là miễn phí và có thể tải về từ: http://www.altova.com/altovaxml.html

MSXML có thể chỉ làm việc với XSLT 1.0 nhưng AltovaXml thể làm việc với XSLT 2.0

+0

đổi tên thành RaptorXML và không miễn phí, từ những gì tôi có thể nhìn thấy (eitehr họ giấu nó tốt, hoặc chỉ có bản tải xuống dùng thử) – ciuly

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