HTML 出力の作成に使用する XSLT ドキュメントにマージしたい、構造の異なる 2 つの XML ドキュメント (以下の例) があります。
私がやりたいことは、次のようなテーブルを作成することです (車の例):
Serialnr Brand Color Year Price Condition
123456 'Opel' 'Blue' '1978' '10000$' 'Used'
... ... ... ... ... ...
これらのうち最後の 2 つ (Price と Condition) は 2 番目のドキュメント (foo2.xml) にあり、これらのドキュメント間の一致は serialnr です。車はドキュメント内で同じ順序で並べられておらず、foo1.xml よりも (使用されない) foo2.xml に多くの車が存在します。
foo1.xml:
<cars>
<car>
<serialnr>123456</serialnr>
<brand>Opel</brand>
<color>Blue</color>
<year>1978</year>
</car>
...and so on...
foo2.xml:
<vehicles>
<vehicle>
<cell nr="2"><data nr="3">123456</data></vehicle> // <--- match on serialnr (123456)
<cell><data nr="3">10000$</data></cell>
<cell><data nr="3">Used</data></cell>
...and so on...
Foo1.xml は、サーバー側で PHP を使用して XSLT ドキュメントに接続され、foo2.xml は XSLT ドキュメントにマージされます (以下を参照)。
車.xsl:
<?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:param name="foo2" select="'foo2.xml'"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<html>
<head>
<title>Producers</title>
</head>
<body>
...//table, thead, tr, th...
<tbody>
<xsl:for-each select="//car">
<tr>
<td>
<xsl:value-of select="serialnr" />
</td>
<td>
<xsl:value-of select="brand" />
</td>
<td>
<xsl:value-of select="color" />
</td>
<td>
<xsl:value-of select="year" />
</td>
</xsl:for-each>
<xsl:for-each select="document($foo2)//Vehicle">
// I need to match the serialnr in some way to get the correct car's data here, but how?
<td>
// Selecting Cell node 2 (price)
//<xsl:value-of select="/? "/>
</td>
<td>
// Selecting Cell node 3 (condition)
//<xsl:value-of select="/? "/>
</td>
それで、どうすればこれを行うことができますか?ここで助けていただければ幸いです。よろしくお願いします!
ノート:
- foo2.xml の構造に一貫性がありません。突然、子ノードが「vehicle」から「part」に変わります (つまり、「vehicles/vehicle」から「vehicles/part」)。
- foo2.xml には、興味のないデータを含む「車両」ノードがたくさんあるので、何らかの if ステートメントを使用して、ループするときに必要なデータが存在するかどうかをテストする必要がありますか?