我正在尝试转换此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();
这对最后两个元素进行排序,然后重新排列前两个元素。什么是解决这个问题的好方法?
答案 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中会自动将其从以前的位置删除。
如果您需要其他任何部分的帮助,请随时澄清。