2012-12-06 2 views
6

두 개의 XML 파일과 XSLT 파일을 결합하여 XHTML 페이지로 변환하려고합니다. 나는 전에 이것을 한 적이 없으며 그것을하는 방법을 찾아 낼 수 없다. 내가 지금까지 가지고있는 이것은 단지 하나의 XML 파일입니다 :PHP에서 XSLT로 XML 변환하기

<?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-파일과 : SS 네임 스페이스. 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 파일

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

나는 감사하겠습니다.

여기에 두 번째 XML 파일은 다음과 같습니다

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

그래서 제 질문은 XSLT와 모두 XML-파일의 데이터를 결합하는 방법은? 그 결과를 XHTML 페이지의 테이블에있는 데이터로 만들고 싶습니다.

+0

XSLT에서 ** 문서 ** 기능을 사용해야 할 수도 있지만 두 번째 XML을 보여주고 달성하고자하는 것을 설명하면 도움이되는 자세한 정보를 제공해야합니다. 감사! –

+0

답변 해 주셔서 감사합니다. 내 질문에 대한 편집, 도와주세요. – ana

+0

첫 번째 XML 파일에는 이름 목록이 들어 있고, 두 번째 XML 파일에는 좌표 목록이 들어 있습니다. 링크 할 데이터간에 연결이 있습니까? 아니면 단순히 같은 페이지에 별도로 데이터를 표시하고 싶습니까? 파일을 결합하는 것은 일반적으로 어렵지 않지만 두 번째 XML 파일은 실제로 Excel XML 파일이며이를 테이블로 변환하는 것은 두 번째 파일을 포함하지 않고도 완전히 별개의 문제입니다! –

답변

5

귀하의 질문에 대한 답변 일 수 있습니다.

두 개의 XML 파일 사용과 관련하여 몇 가지 옵션이 있습니다. 두 개의 XML 파일을 하나의 큰 파일로 결합한 다음 변환을 적용 할 수 있습니다. 또는 XSLT document() 함수를 사용하여 XSLT에서 XML 파일 중 하나를로드 할 수 있습니다.

1. 만들기 하나 개의 큰 XML 문서

<?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. XSTL document() 기능은

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

나는 초보다 첫 번째 기술 이상을 사용하는 경향이있다. XSLT 템플릿에 파일 이름을 하드 코딩하는 것을 좋아하지 않습니다. 두 번째 방법을 사용할 때 XSLT에서 하드 코드 된 것을 피하기 위해 일반적으로 파일 이름을 외부 매개 변수로 전달합니다.