鉴于下面给出的xml,我想编写一个简单的脚本来生成(http)www.herp.com / 和 (http)www.herp.com/derp 即可。可以想象,我遇到的每个应用程序路径。也就是说,如果我有更多,例如:<application path = "wassup" applicationPool="derp />
,我也希望(http)www.herp.com/wassup 。
<sites>
<site name="(http)www.herp.com" id="1" serverAutoStart="true">
<application path="/" applicationPool="derp_administration">
<virtualDirectory path="/" physicalPath="D:\inetpub\herp_webs\derp" />
<virtualDirectory path="/Controls" physicalPath="D:\inetpub\usercontrolslibnew_ent" />
</application>
<application path="/derp" applicationPool="BOOGA">
<virtualDirectory path="/" physicalPath="D:\inetpub\herp_webs\derp" />
<virtualDirectory path="/Controls" physicalPath="D:\inetpub\usercontrolslibnew" />
</application>
</site>
</sites>
我使用以下代码:
import xml.etree.ElementTree as ET
tree = ET.parse("applicationHost.config")
root = tree.getroot()
sites = root.iter('site')
for site in sites:
print site.get('name')
然而,这显然只会给我:
(http) www.herp.com
我无法在属性中看到任何可以指向<application path = "i want this stuff" />
我尝试使用site.tag,site.text,site.attrib和site.tail,这些都没有帮助我看到构建我的网址的应用程序路径。如何解析这个xml代码以给我名称和路径属性?
所以从这里得到了很好的建议。我尝试了以下代码:
sites = root.iter('site')
for site in sites:
apps = site.findall('application')
print apps.tag, apps.attrib
我收到以下错误。
AttributeError: 'list' object has no attribute 'attrib'
标签也有类似的错误。基本上,如果我使用site.find('application')
会给我第一个<application path ="/" applicationPool="whatever"/>
,但我找不到它下面的其余部分。对不起。显然,我运行它的这个特定配置具有我不知道的网站依赖性。我是新工作。
研究来源:
备注: 我有多个* .config文件,使用脚本解析是可行的方法。我知道一些GUI工具可以做基本的东西,但在这里不合适。
答案 0 :(得分:1)
您需要获取<application>
Element
才能访问其path
属性。给定site
,您可以使用site.findall('application')
:
import xml.etree.ElementTree as ET
tree = ET.parse("applicationHost.config")
root = tree.getroot()
sites = root.iter('site')
for site in sites:
apps = site.findall('application')
for app in apps:
print(''.join([site.get('name'), app.get('path')]))
打印
(http)www.herp.com/
(http)www.herp.com/derp