10

次の要素を作成したい:

<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">

次のようなものを使用する場合:

<xsl:element name="excercises">
<xsl:attribute name="xmlns:xsi" namespace="http://www.w3.org/2001/XMLSchema-instance"/>

次に、次のようなものを作成します。

<excercises xp_0:xsi="" xmlns:xp_0="http://www.w3.org/2001/XMLSchema-instance">

それは私が望むもののように見えません...

4

3 に答える 3

8

代わりに次のことを試してください。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@* | node()">
        <xsl:apply-templates select="xml"></xsl:apply-templates>
    </xsl:template>

    <xsl:template match="xml">
        <xsl:element name="exercises">
            <xsl:attribute name="xsi:noNamespaceSchemaLocation">mySchema.xsd</xsl:attribute>
            some value
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

主な関心事は、宣言で xsi 名前空間を宣言することです。

テストのためだけにテンプレートの一致を作成しました。

于 2009-01-08T14:14:23.817 に答える
3

これを行う方法は次のとおりです。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 exclude-result-prefixes="xsi">
    <xsl:output omit-xml-declaration="yes"/>
    <!--                                   -->
    <xsl:template match="/">
      <exercises  xsi:noNamespaceSchemaLocation="mySchema.xsd"/>
    </xsl:template>
</xsl:stylesheet>

この変換が(使用されていない) ソース XML ドキュメントに適用されると、必要な結果が生成されます。

<exercises xsi:noNamespaceSchemaLocation="mySchema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />

<xsl:attribute>あなたのケースでは使用する必要はありませんが、必要に応じて問題なく使用できます。

    <xsl:attribute name="xsi:noNamespaceSchemaLocation">
      <xsl:value-of select="'mySchema.xsd'"/>
    </xsl:attribute>

<xsl:stylesheet>要素で必要な名前空間を単純に定義して、必要な場所で簡単に (再) 使用できるようにすることをお勧めします。これは、生成された複数の要素または属性で特定の名前空間が必要な場合に特に役立ちます。

この場合exclude-result-prefixes、名前空間がすべてのリテラル結果要素に自動的に伝播されないように、属性の値にそのようなプレフィックスをすべて指定することもお勧めします。

于 2009-01-08T14:16:41.520 に答える
1

あなたは単に使用することができます: -

<exercises xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">

タグ名をハードコーディングできない場合は、XSL で直接、それが機能します。本当に必要なのは xsl:element だけです。同様に、条件付きにする必要がない限り、属性を直接追加できます。

于 2009-01-08T14:21:50.713 に答える