1 つの XSLT ドキュメントで 2 つの XML ドキュメントを扱っており、データをマージして 1 つの HTML ドキュメントに入れようとしています。
ドキュメントは id という 1 点で一致します。id は、 foo1.xml内の car ノードの属性として見つかります。foo2.xmlに関しては、id は最初のセル ノード (行ノードの子) の子であるデータ ノード内にあります。この最初のセル ノードに続くセル ノードには、目的のデータ (色と状態) を含むデータ ノードが含まれます。
XSLT ドキュメントでデータが td セルに追加されると、(何らかの方法で) foo2.xmlで正しい ID を見つけ、最後の 2 つの td に車の色と状態を入力する必要があります。
以下の XSLT ドキュメントでは、これを実行しようとして失敗したことがわかります。では、どうすればこれを行うことができますか?
よろしくお願いします!
注: ID の順序は 2 つのファイルで同じではありません。
foo1.xml:
<cars>
<car id="8">
<brand>Saab</brand>
<model>95</model>
<year>2011</year>
</car>
<car id="57">
<brand>Chrysler</brand>
<model>Voyager</model>
<year>2010</year>
</cars>
...
foo2.xml:
<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">57</Data></Cell> // <-- where the id is to be found
<Cell ss:StyleID="s62"><Data ss:Type="String">Yellow</Data></Cell>
<Cell><Data ss:Type="String">New</Data></Cell>
</Row>
<Row>
<Cell ss:Index="2"><Data ss:Type="Number">8</Data></Cell> // <-- where the id is to be found
<Cell ss:StyleID="s62"><Data ss:Type="Number">Black</Data></Cell>
<Cell><Data ss:Type="Number">Used</Data></Cell>
</Row>
<Row>
<Cell ss:Index="2"><Data ss:Type="Number">25</Data></Cell> // <-- where the id is to be found
<Cell ss:StyleID="s62"><Data ss:Type="Number">Blue</Data></Cell>
<Cell><Data ss:Type="Number">Used</Data></Cell>
</Row>
...
マージ.xsl:
<- declarations... ->
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" > <-- the XML namespace (ss:)
<xsl:variable name="foo2" select="document('foo2.xml')" />
<xsl:template match="/">
<html>
<head>
<title>Cars</title>
</head>
<body>
<xsl:apply-templates select="cars" />
</body>
</html>
</xsl:template>
<xsl:template match="cars">
<xsl:for-each select="$foo2//ss:Row">
<xsl:value-of select="ss:Cell/ss:Data/text()" />
</xsl:for-each>
<table>
<tr>
<th>Id</th> <th>Brand</th> <th>Model</th> <th>Year</th> <th>Color</th> <th>Condition</th>
</tr>
<xsl:apply-templates select="car" />
</table>
</xsl:template>
<xsl:template match="car">
<xsl:variable name="id" select="data[2]/text()" />
<tr>
<td><xsl:value-of select="@id" /></td>
<td><xsl:value-of select="brand" /></td>
<td><xsl:value-of select="model" /></td>
<td><xsl:value-of select="year" /></td>
<td><xsl:value-of select="$positions//ss:Row/ss:Cell/ss:Data=@id/preceding-sibling::ss:Cell" /></td> <-- failed try (color)
<td> ??? (Condition) </td>
</tr>
</xsl:template>
</xsl:stylesheet>