1

问题陈述:

鉴于下面给出的 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,但这些都不能帮助我查看构建 url 的应用程序路径。如何解析此 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 工具可以做基本的事情,但在这里不合适。

4

1 回答 1

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
于 2014-05-27T14:22:22.373 回答