繰り返しになりますが、今回は本当の問題があります... XML が 1 つあり、別の XML のフィルターを使用して別の XML に変換する必要があります。
File_in.xml:
<?xml version="1.0" encoding="ISO-8859-15"?>
<root>
<item>
<server>001023541</server>
<name>P1</name>
<desc>Production</desc>
<status>1</status>
<ram>1024</ram>
<hdd>8 To</hdd>
</item>
<item>
<server>201012345</server>
<name>P2</name>
<desc>Production</desc>
<status>4</status>
<ram>2048</ram>
<hdd>8 To</hdd>
</item>
<item>
<server>120332416</server>
<name>P1</name>
<desc>Production</desc>
<status>2</status>
<ram>8196</ram>
<hdd>8 To</hdd>
</item>
</root>
そして別の XML:
フィルタ.xml
<?xml version="1.0" encoding="ISO-8859-15"?>
<Filtre>
<Bloc5>
<Part1>
<EAN>001023541</EAN>
<EAN>012356549</EAN>
<EAN>012356559</EAN>
<EAN>012356569</EAN>
</Part1>
<Part2>
<EAN>201012345</EAN>
<EAN>201012346</EAN>
<EAN>201012347</EAN>
</Part2>
</Bloc5>
</Filtre>
/root/item/server が /Filtre/Bloc5/Part1/EAN の要素と一致する場合、置き換えます
<item>
<server>001023541</server>
<name>P1</name>
<desc>Production</desc>
<status>1</status>
<ram>1024</ram>
<hdd>8 To</hdd>
</item>
に
<item>
<server>MAIN</server>
<status>PRODUCTION</status>
</item>
それ以外の場合、/root/item/server が /Filtre/Bloc5/Part2/EAN の要素と一致する場合は、置き換えます
<item>
<server>201012345</server>
<name>P2</name>
<desc>Production</desc>
<status>4</status>
<ram>2048</ram>
<hdd>8 To</hdd>
</item>
に
<item>
<server>BACKUP</server>
<status>STOPPED</status>
</item>
もう一方は次のように自動的に置き換えられます。
<item>
<server>120332416</server>
<name>P1</name>
<desc>Production</desc>
<status>2</status>
<ram>8196</ram>
<hdd>8 To</hdd>
</item>
に
<item>
<name>OFFLINE</name>
<desc>Production</desc>
</item>
次の方法で、(フィルタリングに使用される) XML の名前を取得します。
<!-- filter settings -->
<xsl:param name="filter_xml" />
<xsl:variable name="filter" select="document('$filter_xml')" />
そして私のコードがあります:
<xsl:for-each select="root/item">
<xsl:choose>
<xsl:when test="index-of(($filter/Filtre/Bloc5/Part1/EAN), ./server)">
<item>
<server>MAIN</server>
<status>PRODUCTION</status>
</item>
</xsl:when>
<xsl:when test="index-of(($filter/Filtre/Bloc5/Part2/EAN), ./server)" >
<item>
<server>BACKUP</server>
<status>STOPPED</status>
</item>
</xsl:when >
<xsl:otherwise>
<item>
<name>OFFLINE</name>
<desc>Production</desc>
</item>
</xsl:otherwise>
</xsl:for-each>
しかし、これはうまくいきません...