私は次のxmlコードを持っています:
<OML>
<bg-def xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="EX1"/>
</OML>
XSLTを使用して属性xmlns:xsiとその値を削除し、結果が次のようになるようにします。
<OML>
<bg-def name="EX1"/>
</OML>
私は次のXSLTコードでこれを実行しようとしました:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:ex="http://exslt.org/dates-and-times" extension-element-prefixes="ex">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" xml:space="preserve"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="bg-def|@ xmlns:xsi"/>
</xsl:transform>
コードを書き終える前に、エディターは次のように警告しました。「W名前空間プレフィックスxmlnsが宣言されていません」。式:xsiを削除してxmlnsと書くだけで、警告は表示されなくなります。しかし、プログラムをコンパイルして実行しても、何も起こらず、期待どおりの出力が得られません。また、xsltファイルの最後の行を次のように変更しようとしています。
<xsl:template match="bg-def|@ name"/>
結果は次のようになります。
<OML>
<bg-def xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</OML>
つまり、属性名は非常にうまく削除されています。しかし、属性xmlns:xsiを使用してこれを実行したいと思います。誰かが私にこれをするのを手伝ってもらえますか?助けてくれてありがとう。フランキー