在XML文件中查找用户并返回变量

时间:2014-02-16 20:15:18

标签: bash

我面临的问题似乎对我来说太复杂了。因此,我希望在这里获得帮助是我最后的机会。

我的客户公司正在使用一个巨大的XML文件,其中包含测试部门,包括这些测试部门的用户等。一个名为“Fighters”的部门的摘录看起来如下(复制1:1(但名称和数字不同)):

<department name="/fighters" id="123879" group="channel" case="none" use="no">
   <options index_name="index.html" listing="0" sum="no"  allowed="no" />
   <target prefix="ttp" suffix=".net" />
   <type="effort">
    <region="20491" readonly="fs1a" readwrite="fs1a" upload="yes" download="yes" repl="yes" hard="0" soft"0" prio="0" write="no" stage="yes" migrate="no" size="0" >
     <read="content" readwrite="content" hard="215822106624" soft="237296943104" prio="5" write="yes"  stage="yes" migrate="no" size="0" />
     <overflow name="20491-set-writable" />
    </replicate>
    <region="20576" readonly="fs1a" readwrite="fs1a" upload="yes" download="yes" repl="yes" hard="0" soft"0" prio="0" write="no" stage="yes" migrate="no" size="0" >
     <read="content" readwrite="content" hard="215822106624" soft="237296943104" prio="5" write="yes"  stage="yes" migrate="no" size="0" />
     <overflow name="20576-set-writable" />
    </replicate>
   </replication>
   <user="T:106603" />
   <user="T:123879" />
   <user="test" />
   <user="ele::123456" />
   <user="company-temp" />
   <user="companymw2" />
   <user="bird" />
   <user="coding11" />
   <user="plazamedia" />
   <allow go="123456=abcdefghijklmnopqrstuvwxyz" />

每个测试部门都面临一个唯一的ID(此处为123879)。用户可以拥有昵称(如coding11)或是真实昵称(如bird)。

所以我希望得到所有用户 - 但不是用户“测试”(似乎一直存在) - 只需搜索department-id就可以存储在变量中(可能设置为数组)。命令如何看起来如此详细?

注意:部门和地区的用户数量各不相同。

1 个答案:

答案 0 :(得分:0)

您有机会bash scripting

awk -F'"' '/<user=/{ print $2 }' input.xml

(OR)

sed -e '/^<user/!{d}' -e '/^<user/s/^.*"\([^"]\+\)".*/\1/' input.xml

您的xml文件格式不正确,但TOTALY 为什么不使用python执行此类任务?

这是快速准确的...... 你可以尝试:

#!/bin/python

import sys
import xml.etree.ElementTree as ET
import commands
input = sys.argv[1]
output = sys.argv[2]

tree = ET.parse(input)
root = tree.getroot()

for <something> in root.findall('<Start From Here>'):
.
.
.