0

私はこのxmlを持っています:

<Item name="Alpha">
    <Field name="CreationDateTime">2012-04-26</Field>
    <Field name="Material" readOnly="X"> Congress </Field>
</Item>

それをこの形式に変換したい (ノード名を対応する属性名に置き換える必要があることに注意してください)

<Item name="Alpha">
    <CreationDateTime >2012-04-26</CreationDateTime>
    <Material readOnly="X"> Congress </Material>
</Item>

jqueryでそれを行う最も簡単な方法は何ですか。これは、数千のレコードを持つテーブルで発生する必要があるため、効率的でなければなりません。

ありがとう

4

1 に答える 1

0

次のコードは、jQuery の map 関数を使用してドキュメント間の変換を行います。これで基本的な作業は完了し、完全なドキュメントのニーズに合わせてさらに拡張することができます。

いくつかの既存の問題:

  • 出力内のタグの大文字と小文字は小文字であり、簡単な解決策が見つからないようです。
  • 何千ものレコードでどのように機能するかはわかりません。:)

ソース:

<script type="text/javascript">
$(function() {
    var XML = 
    '<Item name="Alpha">' +
    '<Field name="CreationDateTime">2012-04-26</Field>' + 
    '<Field name="Material" readOnly="X"> Congress </Field>' +
'</Item>';

$(XML).map(function() {             
    function map() {
        if ($(this).is("Item")) {
            var result = $("<Item>").attr("name", "Alpha");                     
            var children = $(this).children().map(map);


            $(children).each(function() {
                result.append(this);
            });

            return result;
        }

        if ($(this).is("Field")) {
            var name = $(this).attr("name");

            var result = $("<" + name + ">");

            // Transfer other attributes
            $(this.attributes).each(function() {
                if (this.name === "name")
                    return;

                result.attr(this.name, this.value);
            });

            result.text( $(this).text() );
            return result;
        }
    };

    var result = $(XML).map(map);
});
});
</script>
于 2012-10-04T19:38:07.907 に答える