ルートノードの属性を変更するXSLドキュメントを作成したいと思いますが、XMLドキュメントの内容を変更することもできます。XSL:2つの異なる一致の結果を得る方法
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="some:ns">
<xsl:output indent="yes" method="xml" encoding="UTF-8" />
<xsl:strip-space elements="*"/>
<ns:WhiteList>
<name>HEADER</name>
<name>ROOTNODE</name>
<name>foo</name>
<name>bar</name>
<name>toto</name>
</ns:WhiteList>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ROOTNODE[@xsi:id = 'myXSDFile.xsd'] ">
<xsl:copy>
<xsl:attribute name="xsi:id ">myXSDFCleansedFile.xsd</xsl:attribute>
<xsl:apply-templates select="ROOTNODE[@xsi:id = 'myXSDFile.xsd']"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(descendant-or-self::*[name()=document('')/*/ns:WhiteList/*])]"/>
</xsl:stylesheet>
そして、私の入力XML文書には、次のいずれかです:
<?xml version="1.0" encoding="UTF-8"?>
<ROOTNODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:id="myXSDFile.xsd">
<HEADER>
....
</HEADER>
<foo>blabla</foo>
<bar>blabla</bar>
<tab>dada</tab>
<toto>blabla</toto>
<titi>blabla</titi>
</ELIX>
私は得られた出力は、次のいずれかです。
<?xml version="1.0" encoding="UTF-8"?>
<ROOTNODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:id="myXSDFileCleansed.xsd">
それともここ
は私のXSLドキュメントです:<?xml version="1.0" encoding="UTF-8"?>
<ROOTNODE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:id="myXSDFile.xsd">
<HEADER>
....
</HEADER>
<foo>blabla</foo>
<bar>blabla</bar>
<toto>blabla</toto>
</ROOTNODE>
しかし、問題は、2番目の出力が欲しいということですが、xsdファイル名が変更されました!そして私は2つの異なるマッチパスをマージすることに成功しなかった。 2つのマッチパスをマージする方法はありますか?