我有一个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很大,并且有很多层次。我需要在每个级别上应用排序。
答案 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 ;
构造,因为否则节点列表中的节点总是按文档顺序返回。