XML | 質問トピック | 15 回答例

msxsl.exe 使ってます。

015.xml

<?xml version="1.0" encoding="utf-8"?>
<catalog>
	<pr>
		<state>foo</state>
		<name>FOO</name>
	</pr>
	<pr>
		<state>bar</state>
		<name>BAR</name>
	</pr>
	<pr>
		<state>baz</state>
		<name>BAZ</name>
	</pr>
	<pr>
		<state>qux</state>
		<name>QUX</name>
	</pr>
	<pr>
		<state>quux</state>
		<name>QUUX</name>
	</pr>
	<pr>
		<state>corge</state>
		<name>CORGE</name>
	</pr>
	<pr>
		<state>grault</state>
		<name>GRAULT</name>
	</pr>
	<pr>
		<state>garply</state>
		<name>GARPLY</name>
	</pr>
	<pr>
		<state>waldo</state>
		<name>WALDO</name>
	</pr>
	<pr>
		<state>fred</state>
		<name>FRED</name>
	</pr>
	<pr>
		<state>plugh</state>
		<name>PLUGH</name>
	</pr>
	<pr>
		<state>xyzzy</state>
		<name>XYZZY</name>
	</pr>
	<pr>
		<state>thud</state>
		<name>THUD</name>
	</pr>
	<pr>
		<state>hoge</state>
		<name>HOGE</name>
	</pr>
	<pr>
		<state>piyo</state>
		<name>PIYO</name>
	</pr>
	<pr>
		<state>fuga</state>
		<name>FUGA</name>
	</pr>
</catalog>

015.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method='html'
		encoding='utf-8'
		doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
		indent='yes'/>
	<xsl:param name="items_per_page"/>
	<xsl:param name="query_state"/>

	<xsl:template match="/">
		<html>
			<head>
				<title>_</title>
			</head>
			<body>
				<table rules="all" border="1">
					<xsl:choose>
						<xsl:when test="$query_state='all'">
							<xsl:apply-templates select="catalog/pr"/>
						</xsl:when>
						<xsl:otherwise>
							<xsl:apply-templates select="catalog/pr[contains(state, $query_state)]"/>
						</xsl:otherwise>
					</xsl:choose>
				</table>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="catalog/pr">
		<xsl:if test="$items_per_page='all' or position()&lt;=$items_per_page">
			<tr>
				<td align="center"><xsl:value-of select="position()"/></td>
				<td><xsl:value-of select="name"/></td>
				<td><xsl:value-of select="state"/></td>
			</tr>
		</xsl:if>
	</xsl:template>

</xsl:stylesheet>

items_per_page=all query_state=qu の場合

015.bat
@echo off
setlocal
msxsl 015.xml 015.xsl items_per_page=all query_state=qu > 015.html
endlocal
echo on
015.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>_</title>
</head>
<body>
<table rules="all" border="1">
<tr>
<td align="center">1</td>
<td>QUX</td>
<td>qux</td>
</tr>
<tr>
<td align="center">2</td>
<td>QUUX</td>
<td>quux</td>
</tr>
</table>
</body>
</html>

items_per_page=1 query_state=qu の場合

015.bat
@echo off
setlocal
msxsl 015.xml 015.xsl items_per_page=1 query_state=qu > 015.html
endlocal
echo on
015.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>_</title>
</head>
<body>
<table rules="all" border="1">
<tr>
<td align="center">1</td>
<td>QUX</td>
<td>qux</td>
</tr>
</table>
</body>
</html>