我正在尝试从vcxproj文件中获取源文件和include目录。vcsproj示例:
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
....
<ItemGroup>
<ClCompile Include="$(SrcDir)d1f1cpp" />
<ClCompile Include="$(SrcDir)d2f2.cpp" />
</ItemGroup>
...
</Project>
我试过这个:xmlstarlet sel -t -v "//_:ItemGroup/ClCompile/@Include" myProj.vcxproj
,但不起作用。
然而,当我尝试这个(从我遇到的某个页面复制代码)时,它起作用了:
echo '<?xml version="1.0" encoding="utf-8"?> <ELEMENT xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<SUB_ELEMENT attribute="attr_value"/>
</ELEMENT>' | xmlstarlet sel -t -v '//_:SUB_ELEMENT/@attribute' --nl
o/p: attr_value
在从带有名称空间的xml中读取属性值方面,我看不出两者有什么不同。我进一步尝试了vcxproj文件的精简版本:
echo '<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="$(SrcDir)d1f1cpp" /> </ItemGroup> </Project>' | xmlstarlet sel -t -v '//_:ItemGroup/@Include' --nl
o/p: <no o/p>
任何关于它为什么不起作用或如何使其发挥作用的指示都将非常有用。
编辑:vcxproj的预期输出将是文件名列表。对于上述命令,它将是$(SrcDir)d1f1cpp
任何关于它为什么不工作或如何使其工作的指示都将非常有用
由于您使用的是默认命名空间,请添加_:
每个中节点测试的快捷方式定位步骤,和CCD_ 4使文本模式输出的选项:
xmlstarlet select -T -t -v "//_:ItemGroup/_:ClCompile/@Include" -n file.xml