如何根据XML的每个标记中存在的特定属性对多级XML进行排序?

时间:2019-06-11 08:13:23

标签: xml sorting

我有一个XML,其中包含各种标签,而且好处是每个标签都有一个称为“ id”的属性,该属性可能不是唯一的。我需要对这种XML进行排序,以便根据“ id”属性对同一级别的标签进行排序。

我对这件事是陌生的,对XSLT的了解并不多,而且似乎过于复杂。还有其他方法可以实现所需的转换吗?

样本输入XML

<parent id="p2" name="a">
    <child id="c2" name="z"/>
    <child id="c1" name="y"/>
</parent>
<parent id="p1" name="b">
    <child id="c1" name="w"/>
    <child id="c2" name="x"/>
</parent>

预期的输出XML

<parent id="p1" name="b">
    <child id="c1" name="w"/>
    <child id="c2" name="x"/>
</parent>
<parent id="p2" name="a">
    <child id="c1" name="y"/>
    <child id="c2" name="z"/>
</parent>

注:实际的XML很大,并且有很多层次。我需要在每个级别上应用排序。

1 个答案:

答案 0 :(得分:0)

我通常使用xsh进行XML操作(我也碰巧维护了它)。您可以通过以下代码按所有 class SignUpScreen: UIViewController { let username = UITextField() override func viewDidLoad() { super.viewDidLoad() view.addSubview(username) // Background color view.backgroundColor = .white username.placeholder = "Name" username.borderStyle = UITextField.BorderStyle.none // make sure your textField doesn't have back ground username.backgroundColor = .clear let bottomLine = UIView() bottomLine.frame = CGRect(x: 0, y: view.frame.height - 1, width: view.frame.width, height: 1.0) bottomLine.backgroundColor = UIColor.black.cgColor // be sure you bring it to top self.view.layer.insertSublayer(bottomLine, at:0) username.translatesAutoresizingMaskIntoConstraints = false username.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true username.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true username.widthAnchor.constraint(equalToConstant: 150).isActive = true username.heightAnchor.constraint(equalToConstant: 50).isActive = true } } 元素中的所有child元素中的id对其进行排序:

parent

需要特殊的open file.xml ; for //parent xmove &{ sort :k @id child } into . ; save :b ; 构造,因为否则节点列表中的节点总是按文档顺序返回。