1

この XML ツリーを変換しようとしています

<IN1>
    <IN1.1>
        <IN1.1.1>1</IN1.1.1>
    </IN1.1>
    <IN1.17>
        <IN1.17.1>1</IN1.17.1>
    </IN1.17>
    <IN1.47>
        <IN1.47.1>C</IN1.47.1>
    </IN1.47>
    <IN1.3>
        <IN1.3.1>paycode</IN1.3.1>
    </IN1.3>
</IN1>

これに

<IN1>
    <IN1.1>
        <IN1.1.1>1</IN1.1.1>
    </IN1.1>
    <IN1.3>
        <IN1.3.1>paycode</IN1.3.1>
    </IN1.3>
    <IN1.17>
        <IN1.17.1>1</IN1.17.1>
    </IN1.17>
    <IN1.47>
        <IN1.47.1>C</IN1.47.1>
    </IN1.47>
</IN1>

私の現在のコードは

for each (field in msg['IN1'].children()) 
{
    fields.push(field.toString());
}
fields.sort();

これにより、最後の 2 つの要素が並べ替えられますが、最初の 2 つの要素が再配置されます。これにアプローチする良い方法は何ですか?

4

3 に答える 3

1

You might be able to find some luck by using the jQuery TinySort plugin. You can sort DOM elements based on numerical/alphabetical parameters.

于 2012-10-16T19:55:19.470 に答える
0

XSLT は、XML をある形式から別の形式に変換するために作成されました ( jsFiddle )。

var xml = "<IN1><IN1.1><IN1.1.1>1</IN1.1.1></IN1.1><IN1.17><IN1.17.1>1</IN1.17.1></IN1.17><IN1.47><IN1.47.1>C</IN1.47.1></IN1.47><IN1.3><IN1.3.1>paycode</IN1.3.1></IN1.3></IN1>";
var xsl = "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"IN1\"><IN1><xsl:apply-templates select=\"*\"><xsl:sort select=\"substring-after(name(), 'IN1.')\" data-type=\"number\"/></xsl:apply-templates></IN1></xsl:template><xsl:template match=\"*\"><xsl:copy-of select=\".\"/></xsl:template></xsl:stylesheet>";
var parser = new DOMParser();
var domToBeTransformed = parser.parseFromString(xml, "text/xml");
var xslt = parser.parseFromString(xsl, "text/xml");
var processor = new XSLTProcessor();
processor.importStylesheet(xslt);
var newDocument = processor.transformToDocument(domToBeTransformed);
var serializer = new XMLSerializer();
var newDocumentXml = serializer.serializeToString(newDocument);
alert(newDocumentXml);

上記のコードは Chrome と Firefox で動作します。フィドルにはIEの実装があります。IE の秘訣は、Active X に依存していることです。ただし、すべて IE と共にインストールされるため、実際には「外部」ライブラリは使用されませんでした。

幸運を。

于 2012-10-16T22:07:35.227 に答える
0

1) ツリーの各ノードをソートする再帰アルゴリズムを作成します。

お子様ごとに:

2) 要素の下にあるすべての子を JavaScript 配列に収集します。
3) カスタム基準に基づいて配列をソートします。
4) 並べ替えられた順序で子を親に追加して、配列を反復します。
注: 子を DOM に再度追加すると、以前の場所から自動的に削除されます。

これらの部分のいずれかについてさらにサポートが必要な場合は、お気軽にお問い合わせください。

于 2012-10-16T22:15:34.923 に答える