2012-12-06 42 views
6

Tôi đang cố kết hợp hai tệp xml và với tệp XSLT chuyển đổi chúng thành một trang XHTML. Tôi đã không làm điều này trước đây và không thể tìm ra cách để làm điều đó. Đây là những gì tôi có cho đến nay, chỉ với một tệp xml:Chuyển đổi XML bằng XSLT trong PHP

<?php 

$xsl = new DOMDocument(); 
$xsl->load("file.xsl"); 
$inputdom = new DomDocument(); 
$inputdom->load("file.xml"); 

$proc = new XSLTProcessor(); 
$xsl = $proc->importStylesheet($xsl); 
$proc->setParameter(null, "", ""); 

$newdom = $proc->transformToDoc($inputdom); 
print $newdom-> saveXML(); 

xsl-tệp với không gian tên ss:. Tôi không thực sự chắc chắn làm thế nào để sử dụng tiền tố ss?

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> 

<xsl:template match="/"> 
    <html> 
    <body> 

    <table border="1"> 
    <tr bgcolor="#9acd32"> 
     <th>Title</th> 
     <th>Title2</th> 
    </tr> 
    <xsl:for-each select="something/some"> 
    <tr> 
     <td><xsl:value-of select="title"/></td> 
     <td><xsl:value-of select="title2"/></td> 
    </tr> 
    </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 

xml-file

<?xml version="1.0" encoding="iso-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="file.xsl"?> 
<something> 
    <some> 
    <Firstname>Peter</Firstname> 
    <Lastname>Anderson</Lastname> 
    <some> 
..... 

Nếu ai đó có thể cho tôi một cú đá đi đúng hướng Tôi sẽ biết ơn.

Đây là lần thứ hai xml-file:

<?xml version="1.0"?> 
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns:x="urn:schemas-microsoft-com:office:excel" 
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:html="http://www.w3.org/TR/REC-html40"> 
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> 
    <Created>2012-09-25T13:44:01Z</Created> 
    </DocumentProperties> 
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"> 
    <AllowPNG/> 
</OfficeDocumentSettings> 
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> 
    <WindowHeight>14060</WindowHeight> 
    <WindowWidth>25040</WindowWidth> 
    <WindowTopX>25540</WindowTopX> 
    <WindowTopY>4100</WindowTopY> 
    <Date1904/> 
    <ProtectStructure>False</ProtectStructure> 
    <ProtectWindows>False</ProtectWindows> 
</ExcelWorkbook> 
<Styles> 
    <Style ss:ID="Default" ss:Name="Normal"> 
    <Alignment ss:Vertical="Bottom"/> 
    <Borders/> 
    <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="12" ss:Color="#000000"/> 
    <Interior/> 
    <NumberFormat/> 
    <Protection/> 
    </Style> 
    <Style ss:ID="s62"> 
    <Font ss:FontName="Courier" ss:Color="#000000"/> 
    </Style> 
</Styles> 
<Worksheet ss:Name="Workbook1.csv"> 
    <Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="79" x:FullColumns="1" 
    x:FullRows="1" ss:DefaultColumnWidth="65" ss:DefaultRowHeight="15"> 
    <Column ss:Index="2" ss:AutoFitWidth="0" ss:Width="43"/> 
    <Column ss:AutoFitWidth="0" ss:Width="113"/> 
    <Column ss:Index="5" ss:AutoFitWidth="0" ss:Width="220"/> 
    <Row ss:Index="6"> 
    <Cell ss:Index="3" ss:StyleID="s62"/> 
    </Row> 
    <Row> 
    <Cell ss:Index="3" ss:StyleID="s62"/> 
    </Row> 
    <Row> 
    <Cell ss:Index="3" ss:StyleID="s62"/> 
    </Row> 
    <Row> 
    <Cell ss:Index="2"><Data ss:Type="String">id</Data></Cell> 
    <Cell ss:StyleID="s62"><Data ss:Type="String">latitude</Data></Cell> 
    <Cell><Data ss:Type="String">longitude</Data></Cell> 
    </Row> 
    <Row> 
    <Cell ss:Index="2"><Data ss:Type="Number">8</Data></Cell> 
    <Cell ss:StyleID="s62"><Data ss:Type="Number">57.4999</Data></Cell> 
    <Cell><Data ss:Type="Number">15.8280</Data></Cell> 
    </Row> 
..... 

Vì vậy, câu hỏi của tôi là làm thế nào để kết hợp dữ liệu từ cả hai XML file với XSLT? Tôi muốn kết quả là dữ liệu trong một bảng trên trang XHTML.

+0

Có thể bạn sẽ cần sử dụng chức năng ** document ** trong XSLT, nhưng để cung cấp đầy đủ chi tiết hơn, nó sẽ giúp ích nếu bạn hiển thị XML thứ hai và giải thích những gì bạn đang cố gắng đạt được. Cảm ơn! –

+0

Cảm ơn câu trả lời của bạn. Đã chỉnh sửa câu hỏi của tôi, hy vọng nó sẽ giúp – ana

+0

Tệp XML đầu tiên chứa danh sách các tên, tệp XML thứ hai là danh sách các tọa độ. Có bất kỳ kết nối nào giữa dữ liệu để liên kết sau đó hay bạn chỉ muốn dữ liệu được hiển thị riêng trong cùng một trang? Kết hợp các tệp thường không khó, nhưng tệp XML thứ hai của bạn thực sự là một tệp XML của Excel và chuyển đổi thành một bảng là một vấn đề riêng biệt hoàn toàn, ngay cả khi không có tệp thứ hai! –

Trả lời

5

Đây có thể là câu trả lời cho một phần câu hỏi của bạn.

Đối với việc sử dụng hai tệp XML, bạn có một vài tùy chọn. Bạn có thể kết hợp hai tệp XML thành một tệp lớn hơn, sau đó áp dụng một biến đổi cho tệp đó. Ngoài ra, bạn có thể sử dụng hàm XSLT document() để tải một trong các tệp XML từ bên trong XSLT.

1. Make một tài liệu XML lớn

<?php 

// XML 
$x1 = file_get_contents("file1.xml"); 
$x2 = file_get_contents("file2.xml"); 
$xml_doc = new DOMDocument(); 
$xml_doc->loadXML("<root><x1>$x1</x1><x2>$x2</x2></root>"); 

// XSL 
$xsl_doc = new DOMDocument(); 
$xsl_doc->load("file.xsl"); 

// Proc 
$proc = new XSLTProcessor(); 
$proc->importStylesheet($xsl_doc); 
$newdom = $proc->transformToDoc($xml_doc); 

print $newdom->saveXML(); 

?> 

2. Sử dụng XSTL document() chức năng

<?php 

// XML 
$xml_doc = new DOMDocument(); 
$xml_doc->load("file1.xml"); 


// XSL 
$xsl_doc = new DOMDocument(); 
$xsl_doc->load("file.xsl"); 

// Proc 
$proc = new XSLTProcessor(); 
$proc->importStylesheet($xsl_doc); 
$newdom = $proc->transformToDoc($xml_doc); 

print $newdom->saveXML(); 

?> 


<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:variable name="file2" select="document('file2.xml')/*"/> 

    <xsl:template match="/"> 
    <xsl:copy-of select="$file2"/> 
    </xsl:template> 

</xsl:transform> 

tôi có xu hướng sử dụng các kỹ thuật đầu tiên hơn so với thứ hai. Tôi không thích các tên tệp hardcoding thành các mẫu XSLT. Khi tôi sử dụng phương pháp thứ hai, tôi thường sẽ chuyển tên tệp dưới dạng tham số bên ngoài để tránh làm cho nó bị mã hóa cứng trong XSLT.

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