2016-05-19 2 views
0

J'essaye d'analyser un vcxproj avec Python et lxml. Lorsque j'essaie de faire cela, rien ne s'affiche pendant l'impression à moins que je ne supprime le contenu <Project >.Analyse vcxproj avec python et lxml

Voici mon .vcxproj (je l'ai réduit à tester):

<?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> 

Et mon code 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) 

Si je lance comme ça, script fonctionne, mais rien montrer. Si je supprime DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" dans le nœud projet fonctionne script ...

Je suis nouveau xml, peut-être que je fais quelque chose de mal. pouvez-vous m'aider s'il vous plaît pour résoudre ceci?

Merci pour votre aide.

Répondre

1

solution trouvée ici: lxml etree xmlparser remove unwanted namespace

Il semble, je dois namespace précis avant (si elle existe) comme ça:

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)