2008-12-11 49 views
6

Tôi đang cố nhúng một xsl vào một tệp XML. Lý do để làm điều này là tạo một tệp duy nhất có thể được chuyển sang các máy tính khác nhau, điều này sẽ ngăn không cho cần di chuyển tệp xsl.Nhúng xsl vào một tệp XML

Tệp xsl đang tạo bảng và lấy một bước kiểm tra từ xml và liệu nó có vượt qua hay không, khá đơn giản.
Vấn đề tôi gặp phải, tôi nghĩ, đó là xsl có javascript và hiển thị của nó khi xml được tải trong IE.

Khi tôi tải tệp xml bằng IE, javascript được hiển thị phía trên bảng và bên dưới bảng xml được hiển thị.

Sau đây là cách tài liệu của tôi được đặt ra:

<!DOCTYPE doc [ 
<!ATTLIST xsl:stylesheet 
    id ID #REQUIRED> 
]> 

<doc>  

<xsl:stylesheet id="4.1.0" 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:user="http://www.ni.com/TestStand" 
    xmlns:vb_user="http://www.ni.com/TestStand/" > 

<xsl:template match="xsl:stylesheet" /> 
    <xsl:text disable-output-escaping="yes"> 

    <msxsl:script language="vbscript" implements-prefix="vb_user"> 
     option explicit 
     'This function will return the localized decimal point for a decimal number 
     Function GetLocalizedDecimalPoint() 
      dim lDecPoint 
      lDecPoint = Mid(CStr(1.1),2,1) 
      GetLocalizedDecimalPoint = lDecPoint 
     End Function 
    </msxsl:script> 
    <msxsl:script language="javascript" implements-prefix="user"><![CDATA[ 
     // This style sheet will not show tables instead of graphs for arrays of values if 
     // 1. TSGraph control is not installed on the machine 
     // 2. Using the stylesheet in windows XP SP2. Security settings prevent stylesheets from creatign the GraphControl using scripting. 
     //  Refer to the TestStand Readme for more information. 

//more javascript functions 
//code to build table and insert data from the xml 

</xsl:stylesheet> 

<Reports> 
<Report Type='UUT' Title='UUT Report' Link='-1-2008-12-3-10-46-52-713' UUTResult='Failed' StepCount='51'> 

// rest of xml 

</Report> 

</Reports> 
</doc> 

Trả lời

11

Although the W3C XSLT Spec supports embedding an XSLT stylesheet vào một tài liệu XML, có vẻ như IE và Firefox không hỗ trợ này.

CẬP NHẬT: Theo nhận xét của Robert Niestroj, năm sau, trong tháng 10 năm 2014, công trình này trong FireFox 33.

Tuy nhiên, có một lựa chọn tốt: nhúng các tài liệu XML vào XSLT biểu định kiểu.

Dưới đây là ví dụ.

Một kiểu XSLT chứa một tài liệu XML nhúng:

 
<?xml-stylesheet type="text/xsl" href="myEmbedded.xml"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 
    <xsl:variable name="vEmbDoc"> 
     <doc> 
      <head></head> 
      <body> 
       <para id="foo">Hello I am foo</para> 
      </body> 
     </doc> 
    </xsl:variable> 
    <xsl:template match="para"> 
     <h1><xsl:value-of select="."/></h1> 
    </xsl:template> 
    <xsl:template match="xsl:template"/> 
</xsl:stylesheet> 

Khi tis tập tin được mở trong IE, kết quả mong muốn sẽ được hiển thị bởi trình duyệt:

Hello I am foo

Lưu ý, rằng cần phải bao gồm các mẫu bỏ qua hầu hết các hướng dẫn XSLT (trong trường hợp này chúng tôi bỏ qua bất kỳnàochỉ đơn giản là không có cơ thể mẫu.

+1

Lưu ý quan trọng khi bạn đang nhúng tài liệu trong một tờ định kiểu như thế này - tên tệp được mã hóa ở dòng đầu tiên của biểu định kiểu. Điều đó có nghĩa là nếu bạn đổi tên tệp, tài liệu sẽ không còn phân tích cú pháp nữa. – Colen

+0

Nó hoạt động trong Firefox 33. Kiểm tra ngày hôm nay. –

+0

@RobertNiestroj, Cảm ơn thông tin này. Đã cập nhật câu trả lời. –

0

Vì stylesheet bạn tận dụng msxsl kỹ thuật trước cho anabling stylesheet nhúng cho các trình duyệt IE nên sử dụng tốt cho bạn.

Nếu bạn muốn nhúng biểu định kiểu hoạt động cho tất cả các trình duyệt bạn có thể muốn sử dụng kỹ thuật support of stylesheet embedding for ALL browsers.

+0

Bạn có muốn chỉnh sửa câu trả lời trước đó của mình với thông tin này không? Tôi có thể làm điều đó cho bạn. Bạn có mất kết nối với tài khoản trước của mình không? Nhấp vào liên kết "liên hệ với chúng tôi" ở cuối trang và thông báo cho nhóm. –

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