Разбор 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)
Другие вопросы по тегам