[解決済み] XSLT v2.0 を用いて XML ファイルに schemaLocation を挿入する。
2022-01-25 15:44:54
質問事項
XMLファイルにschemaLocationを挿入するのに問題があります。ほぼ期待通りの出力が得られますが、他の要素がschemaLocationを埋め込んでしまいます。以下は私のサンプルファイルです。
INPUT:
<Sync releaseID="9.2">
<Document>
<Group>
<Header>
<Field1>232</Field1>
<Field2>dfd</Field2>
</Header>
</Group>
</Document>
そして、namespace と schemalocation を
<Document>
タグを使用します。以下は私のXSLTです。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[ancestor-or-self::Document]">
<xsl:element name="{name()}" namespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<xsl:attribute name="xsi:schemaLocation">urn:iso:std:iso:20022:tech:xsd:pain.001.001.03</xsl:attribute>
<xsl:apply-templates select="*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
の出力が生成されました。
<Sync releaseID="9.2">
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<Group xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<Header xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<Field1 xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">232</Field1>
<Field2 xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">dfd</Field2>
</Header>
</Group>
</Document>
の出力が期待されます。
<Sync releaseID="9.2">
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<Group>
<Header>
<Field1>232</Field1>
<Field2>dfd</Field2>
</Header>
</Group>
</Document>
他の要素にあるschemaLocationを削除するには?
ありがとうございます。
解決方法は?
必要なのは
追加
に一致するテンプレート
Document
のみで、そこに(そしてそこだけに)属性を追加してください。の子孫にのみマッチするように、既存のテンプレートを変更します。
Document
:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[ancestor::Document]">
<xsl:element name="{name()}" namespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<xsl:apply-templates select="*"/>
</xsl:element>
</xsl:template>
<xsl:template match="Document">
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<xsl:apply-templates select="*"/>
</Document>
</xsl:template>
</xsl:stylesheet>
関連
-
[解決済み] XSLT v2.0 を用いて XML ファイルに schemaLocation を挿入する。
-
[解決済み] XSLT <xsl:if> で文字列を比較するときに "not equals to" を指定するにはどうすればよいですか?
-
[解決済み] XSLT : 1から60までのループ処理
-
[解決済み] XSLで親ノードの属性を取得する
-
[解決済み] XSLTにおける分割
-
[解決済み] XSLTで現在の日付を挿入することはできますか?
-
[解決済み】XSLTで を挿入する方法
-
[解決済み】XPathでノードが存在するかどうかを確認する
-
[解決済み] XSLTで最後の要素を取得する
-
[解決済み] xsltのtest属性に2つの条件を入れることはできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] XSLT v2.0 を用いて XML ファイルに schemaLocation を挿入する。
-
[解決済み] XSLT <xsl:if> で文字列を比較するときに "not equals to" を指定するにはどうすればよいですか?
-
[解決済み] XSLTで指定された値を持つ要素を数える
-
[解決済み] XSLT : 1から60までのループ処理
-
[解決済み] ノードに属性を追加する
-
[解決済み] XSLTにおける分割
-
[解決済み] XSLの "contains "ディレクティブはありますか?
-
[解決済み】XSLTで を挿入する方法
-
[解決済み] XSLTで最後の要素を取得する
-
[解決済み] xsltのtest属性に2つの条件を入れることはできますか?