获取XML中父标记的属性

时间:2017-02-17 21:17:19

标签: xml bash shell

我已经获得了这一小段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,但到目前为止我没有运气,有任何线索吗?

2 个答案:

答案 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"