XML中的XML按标签排序

时间:2012-10-16 19:45:52

标签: javascript xml sorting

我正在尝试转换此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();

这对最后两个元素进行排序,然后重新排列前两个元素。什么是解决这个问题的好方法?

3 个答案:

答案 0 :(得分:1)

您可以通过使用jQuery TinySort插件找到一些运气。您可以根据数字/字母参数对DOM元素进行排序。

答案 1 :(得分: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; fiddle有一个IE实现。 IE的诀窍在于它依赖于Active X.但是,所有这些都是用IE安装的,所以真的没有使用“外部”库。

祝你好运。

答案 2 :(得分:0)

1)编写一个递归算法,对树中的每个节点进行排序。

对于每个孩子:

2)将元素下的所有子节点聚集到一个JavaScript数组中 3)根据自定义标准对阵列进行排序 4)迭代数组,按顺序将子节点添加到父节点 注意:将子项重新添加到DOM中会自动将其从以前的位置删除。

如果您需要其他任何部分的帮助,请随时澄清。