Разбор vcxproj с python и lxml
Я пытаюсь разобрать vcxproj с Python и lxml. Когда я пытаюсь это сделать, во время печати ничего не набивается, если я не удаляю то, что в <Project >
,
Вот мой.vcxproj (я сократил его для тестирования):
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseDebug|Win32">
<Configuration>ReleaseDebug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseDebug|x64">
<Configuration>ReleaseDebug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
</Project>
И мой код Python:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from lxml import etree
tree = etree.parse("core.xml")
for conf in tree.xpath("/Project/ItemGroup/ProjectConfiguration/Configuration"):
print(conf.text)
Если я бегу так, скрипт работает, но ничего не показывает. Если я удалю DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
в узле Project скрипт работает...
Я новичок в XML, может быть, я делаю что-то не так. Можете ли вы помочь мне, пожалуйста, чтобы решить эту проблему?
Спасибо за помощь.
1 ответ
Решение
Найденное решение здесь: lxml etree xmlparser удаляет нежелательное пространство имен
Кажется, я должен уточнить пространство имен раньше (если оно есть) вот так:
from lxml import etree
tree = etree.parse("core.xml")
namespaces = {'ns':'http://schemas.microsoft.com/developer/msbuild/2003'}
for conf in tree.xpath('//ns:Configuration', namespaces=namespaces):
print (conf.text)