JavaScript中的XML按标记排序

JavaScript中的XML按标记排序,javascript,xml,sorting,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>

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

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

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

使用jQuery插件可能会带来好运。您可以根据数字/字母参数对DOM元素进行排序。

创建XSLT是为了将XML从一种形式转换为另一种形式():

var xml=“11Cpaycode”;
var xsl=“”;
var parser=新的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=新的XMLSerializer();
var newDocumentXml=serializer.serializeToString(newDocument);
警报(newDocumentXml);
上面的代码在Chrome和Firefox中工作;有一个IE的实现。IE的诀窍是它依赖于Active X。它都是用IE安装的,所以实际上,没有使用“外部”库


祝你好运。

创建XSLT是为了将XML从一种形式转换为另一种形式():

var xml=“11Cpaycode”;
var xsl=“”;
var parser=新的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=新的XMLSerializer();
var newDocumentXml=serializer.serializeToString(newDocument);
警报(newDocumentXml);
上面的代码在Chrome和Firefox中工作;有一个IE的实现。IE的诀窍是它依赖于Active X。它都是用IE安装的,所以实际上,没有使用“外部”库

祝你好运。

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

对于每个孩子:

2) 将元素下的所有子元素收集到一个JavaScript数组中。
3) 根据自定义条件对数组进行排序。
4) 迭代数组,按排序顺序将子元素添加到父元素。
注意:将子对象重新添加到DOM中会自动将其从以前的位置移除

如果您需要有关这些部分的其他帮助,请随时澄清。

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

对于每个孩子:

2) 将元素下的所有子元素收集到一个JavaScript数组中。
3) 根据自定义条件对数组进行排序。
4) 迭代数组,按排序顺序将子元素添加到父元素。
注意:将子对象重新添加到DOM中会自动将其从以前的位置移除


如果您需要有关这些部分的其他帮助,请随时澄清。

排序标准是什么?您不应该真正使用“for each in”块请参见:我建议您使用javascript库(如JQuery)或框架(如ExtJS):它们有一个易于使用且功能强大的XML解析器。对于排序标准,顺序应为而不是,并且必须在没有外部库或frameworks@adriang,这意味着您正在使用jQuery,对吗?排序标准是什么?您不应该真正使用“for each in”请看:我建议您使用javascript库(如JQuery)或框架(如ExtJS):它们有一个易于使用且功能强大的XML解析器。对于排序标准,顺序应该是而不是,这必须在没有外部库或框架的情况下完成frameworks@adriang,这意味着您正在使用jQuery,对吗?
<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();
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);