我已经获得了这一小段XML:
<tile x="764" y="491" z="7">
<item id="1988"/>
<inside>
<item id="3972"/>
</inside>
</tile>
<tile x="764" y="492" z="7">
<item id="2343"/>
</tile>
<tile x="764" y="491" z="7">
<item id="2000"/>
<inside>
<item id="3972" special_description="whatever"/>
</inside>
</tile>
<tile x="765" y="491" z="7">
<item id="2114"/>
</tile>
<tile x="764" y="491" z="7">
<item id="1988"/>
</tile>
我想根据在item标签中搜索特定属性来获取tile属性详细信息。例如,如果我要寻找3972,我会得到这样的结果:
x="764" y="491" z="7" : id="3972"
x="764" y="491" z="7" : id="3972" special_description="whatever"
显然,只要我只有我正在寻找的详细信息,如果有[[item]]的[[tile]]标签的属性,结果措辞的确切含义并不重要其中包含[[id =&#34; 3972&#34;]]并显示该[[item]]的属性,并省略其他图块。
我尝试过使用XMLStarlet,但到目前为止我没有运气,有任何线索吗?
答案 0 :(得分:0)
只是为了好玩,你可以尝试一下这个:
override func viewDidLoad() {
super.viewDidLoad()
let view = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568))
let indicator = MaterialLoadingIndicator(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
indicator.center = CGPoint(x: 320*0.5, y: 568*0.5)
view.addSubview(indicator)
indicator.startAnimating()
self.view.addSubview(view) // John, this is what was missing
}
当然,对于那种数据使用适当的解析器应该是您的首选。同时,似乎上面的工作正常(使用所有建议的数据进行测试)。
答案 1 :(得分:0)
@This Guy:试试:
awk '/<tile/{A=1} /<\/tile>/{A="";if(VAL ~ /3972/){print VAL;};VAL=""} /<\/inside/{B=""} /<inside/{B=1} A{gsub(/tile |>|<|\/|inside/,"");if(B){sub(/item id/,": id")};if(!B){gsub(/item id=.*|^[[:space:]]+/,"")};VAL=VAL?VAL OFS $0:$0}' Input_file
非单一衬里形式的解决方案也如下。
awk '/<tile/{
A=1
}
/<\/tile>/{
A="";
if(VAL ~ /3972/){
print VAL;
};
VAL=""
}
/<\/inside/{
B=""
}
/<inside/{
B=1
}
A{
gsub(/tile |>|<|\/|inside/,"");
if(B){
sub(/item id/,": id")
};
if(!B){
gsub(/item id=.*|^[[:space:]]+/,"")
};
VAL=VAL?VAL OFS $0:$0
}
' Input_file
输出如下。
x="764" y="491" z="7" : id="3972"
x="764" y="491" z="7" : id="3972" special_description="whatever"