0

私はこれを持っています:

<Item name="Alpha">
    <Field name="CreationDateTime">2012-04-26</Field>
    <Field name="Material" readOnly="X"> Congress </Field>
</Item>
<Item name="Beta">
    <Field name="CreationDateTime">2012-05-26</Field>
    <Field name="Material" readOnly="X"> Democracy </Field>
</Item>
   .
   .
   .
 and so on...

そして、この形式に変換したい:

<Item name="Alpha">
   <CreationDateTime >2012-04-26</CreationDateTime>
   <Material readOnly="X"> Congress </Material>
</Item>
<Item name="Beta">
   <CreationDateTime >2012-05-26</CreationDateTime>
   <Material readOnly="X"> Democracy </Material>
</Item>
    .
    .
    .
and so on...

クライアント側でこれを行う必要があります (つまり、javascript と jQuery で)。そのためにjQueryプラグインを使用できます(たとえば、GoogleのAJAXSLT)。問題は、私は以前に XSLT を実行したことがなく (それも JavaScript を使用して!)、どうすればよいかわかりません。

4

1 に答える 1

1

問題は、私は以前に XSLT を実行したことがなく (それも JavaScript を使用して!)、どうすればよいかわかりません。

XSLT は、XML ドキュメントを他の (ほとんどが XML ですが、HTML、プレーン テキストなども含む) ドキュメントに変換するための言語です。必要なのは、作業対象の入力 XML、出力を取得するために入力に適用する変換、およびそれを行うための XSLT プロセッサです。

XSLT プロセッサは、ツール、ライブラリ、フレームワークまたはオペレーティング システムによって提供される一部の機能、またはこの場合 (JavaScript を使用して) ブラウザにすることができます。

すでに XML 入力があるので、プロセッサと変換が必要です。残念ながら、プロセッサはブラウザー固有のもの ( Mozilla のXSLTProcessor 、IE のActiveXなど) であり、使用している特定のブラウザーをテストするコードを記述する必要があります (たとえば、このページのソース コードで確認できるように)。

幸いなことに、あなたが言及したGoogle AJAXSLTのようなJavaScriptライブラリはその下の詳細を隠し、ブラウザ間で使用できる統一されたAPIを公開するので、そうする必要はありません. そのため、あとは変換を行う XSL ファイルを作成するだけです。

サンプルに基づいて、入力が次の場合:

<?xml version="1.0" encoding="UTF-8"?>
<Items>
    <Item name="Alpha">
        <Field name="CreationDateTime">2012-04-26</Field>
        <Field name="Material" readOnly="X">Congress</Field>
    </Item>
    <Item name="Beta">
        <Field name="CreationDateTime">2012-05-26</Field>
        <Field name="Material" readOnly="X">Democracy</Field>
    </Item>
</Items>

次のような XSL を使用します。

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

    <xsl:template match="/">
        <Items>
            <xsl:apply-templates />
        </Items>
    </xsl:template>

    <xsl:template match="Item">
        <Item>
            <xsl:attribute name="name">
                <xsl:value-of select="@name" />
            </xsl:attribute>
            <xsl:apply-templates />
        </Item>
    </xsl:template>

    <xsl:template match="Field">
        <xsl:variable name="fieldName" select="@name" />
        <xsl:element name="{$fieldName}">
            <xsl:if test="@readOnly">
                <xsl:copy-of select="@readOnly" />
            </xsl:if>
            <xsl:value-of select="." />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

あなたはこれを得る:

<?xml version="1.0" encoding="UTF-8"?>
<Items>
    <Item name="Alpha">
        <CreationDateTime>2012-04-26</CreationDateTime>
        <Material readOnly="X">Congress</Material>
    </Item>
    <Item name="Beta">
        <CreationDateTime>2012-05-26</CreationDateTime>
        <Material readOnly="X">Democracy</Material>
    </Item>
</Items>

これにより、javascript で XSLT をより早く開始できることを願っています。

最後に、2.0 はまだブラウザーでサポートされていないため、XSLT 1.0 に集中してください。

于 2012-10-21T14:15:15.097 に答える