2014-02-16 26 views
1

我面临的问题似乎对我来说太复杂了。所以我希望能够在这里获得帮助,成为我的最后一次机会。在XML文件中查找用户并返回变量

我的客户的公司正在使用一个巨大的XML文件,其中包含测试部门,包括那些测试部门的用户等等。被称为“战士”一个部门的提取物看起来如下(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)。

所以我想要所有的用户 - 但不是用户“测试”(似乎所有的时间都存在) - 通过搜索部门ID存储在一个变量(可能设置为数组)。命令如何看起来像细节?

注:部门和地区的用户数量有所不同。

+1

没有很好地形成你的'xml'。 – Birei

+0

是的,但这不应该有害。 –

+2

是的。它有害,因为你不能使用'xml'解析器来解决它。这就是要走的路。 – Birei

回答

0

你有机会与bash scripting

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

(OR)

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

XML文件是不正确的格式,但完全以 为什么没有这样的任务,使用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>'): 
. 
. 
.