복잡한 XML이 있는데 HTML로 변환하는 XSL 변환을 작성하려고합니다. 누군가 나를 도와 줄래?복잡한 XML의 XSL 변환
여기 여기에 XML
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="Mbooks.xsl"?>
<project>
<books>
<bookName>Eclpise</bookName>
<bookCount>3</bookCount>
<Data>
<NEW>
<bookNumber>book3687110</bookNumber>
<ISBN>927fd6ca660e5a9</ISBN>
<Isbninfo>
<IsbninfoDetails>
<IsbninfoName>new book</IsbninfoName>
<IsbninfoVersion>version 1</IsbninfoVersion>
</IsbninfoDetails>
<IsbninfoDetails>
<IsbninfoName> new book 1</IsbninfoName>
<IsbninfoVersion>version 2</IsbninfoVersion>
</IsbninfoDetails>
</Isbninfo>
</NEW>
<NEW>
<bookNumber>book3674796</bookNumber>
<ISBN>6fa276825144</ISBN>
<Isbninfo>
<IsbninfoDetails>
<IsbninfoName>new book 3</IsbninfoName>
<IsbninfoVersion>version 3</IsbninfoVersion>
</IsbninfoDetails>
<IsbninfoDetails>
<IsbninfoName>new book 4</IsbninfoName>
<IsbninfoVersion>version 4</IsbninfoVersion>
</IsbninfoDetails>
</Isbninfo>
</NEW>
</Data>
</books>
<books>
<bookName>ORACLE</bookName>
<bookCount>0</bookCount>
<Data>
</Data>
</books>
<books>
<bookName>MUSIC</bookName>
<bookCount>0</bookCount>
<Data>
</Data>
</books>
</project>
인 XSLT이다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>BOOK_INFORMATION </h2>
<table style="display: inline-block; border: 1px solid; float: left; ">
<tr bgcolor="#FFA500">
<th>book Name</th>
<th>book_Count</th>
<th>book_Number</th>
<th>ISBN</th>
<th>Isbninfo_Name</th>
<th>Isbninfo_Version</th>
</tr>
<xsl:for-each select="project/books">
<tr>
<td>
<xsl:value-of select="bookName"/>
</td>
<td>
<xsl:value-of select="bookCount"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
는 내가 다른 정보를 얼마나 확실하지 않다 : 나는 하나 개의 테이블에서 모든 것을 할 수 있습니다. 나는 각각에 대해 <xsl:for-each>
을 시도했지만 작동하지 않습니다. 귀하의 예제에 적용
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="text()">
</xsl:template>
<xsl:template match="IsbninfoDetails">
<tr>
<td>
<xsl:value-of select="../../../../bookName"/>
</td>
<td>
<xsl:value-of select="../../../../bookCount"/>
</td>
<td>
<xsl:value-of select="../../bookNumber"/>
</td>
<td>
<xsl:value-of select="../../ISBN"/>
</td>
<td>
<xsl:value-of select="IsbninfoName"/>
</td>
<td>
<xsl:value-of select="IsbninfoVersion"/>
</td>
</tr>
</xsl:template>
<xsl:template match="books[not(Data/NEW)]">
<tr>
<td>
<xsl:value-of select="bookName"/>
</td>
<td>
<xsl:value-of select="bookCount"/>
</td>
</tr>
</xsl:template>
<xsl:template match="NEW[not(Isbninfo/IsbninfoDetails)]">
<tr>
<td>
<xsl:value-of select="../../bookName"/>
</td>
<td>
<xsl:value-of select="../../bookCount"/>
</td>
<td>
<xsl:value-of select="bookNumber"/>
</td>
<td>
<xsl:value-of select="ISBN"/>
</td>
</tr>
</xsl:template>
<xsl:template match="/">
<html>
<body>
<h2>BOOK_INFORMATION </h2>
<table style="display: inline-block; border: 1px solid; float: left; ">
<tr bgcolor="#FFA500">
<th>book Name</th>
<th>book_Count</th>
<th>book_Number</th>
<th>ISBN</th>
<th>Isbninfo_Name</th>
<th>Isbninfo_Version</th>
</tr>
<xsl:apply-templates/>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
이 생산 :
안녕하세요. 답변을 주셔서 감사하지만 도서 이름, book_count, book_number 및 ISBN 번호를 중복 할 수 없으므로 행 간격과 같은 항목을 추가하여 적절한 표처럼 보이게 할 수 있습니까? 도움 주셔서 감사합니다. – Maxyie
네, 물론 가능 합니다만, 당신이 원하는 정확히 무엇을 시도했는지, 그리고 당신이 시도한 것을 좀 더 정확하게 지정해야합니다. – MiMo
혼란스러워서 죄송합니다. 필요한 필드가 중복되지 않는 적절한 테이블을 원합니다. 내가 foreach 루프 내부에서 foreach 루프를 사용하여 노력하고 있지만 그것은 자바 또는 펄 작동 방식으로 작동하지 않는 것 같아요. 나는 새 스레드에서 "html 예제를 추가했습니다"라고 대답했습니다. 여기에 DD하지 못했습니다. – Maxyie