You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xmlstarlet读取MSVS vcxproj项目源文件失效问题

问题原因
  • xmlstarlet 中用于匹配默认命名空间的_:前缀仅对当前标注前缀的单个节点生效,不会沿XPath路径自动继承给子节点。初始查询命令//_:ItemGroup/ClCompile/@Include仅为父节点ItemGroup添加了命名空间匹配标识,子节点ClCompile未加前缀,会被识别为无命名空间节点,与vcxproj文件内处于MSBuild默认命名空间下的实际ClCompile节点不匹配,因此无法返回结果。
  • 精简测试无输出的核心错误:测试所用XPath//_:ItemGroup/@Include的查询目标是ItemGroup节点自身的Include属性,但实际Include属性挂载在ItemGroup的子节点ClCompile上,节点层级选择错误,自然无返回内容。
  • 前期简单测试可正常运行,是因为测试用XPath路径中的目标节点SUB_ELEMENT明确添加了_:前缀,路径指向完全准确,不存在漏加前缀、层级匹配错误的问题。
正确实现方法

提取所有源文件路径

执行以下命令即可提取vcxproj中所有C/C++源文件的路径:

xmlstarlet sel -t -v "//_:ItemGroup/_:ClCompile/@Include" -n myProj.vcxproj

使用构造的精简vcxproj样例运行该命令,可得到预期输出:

$(SrcDir)d1\f1cpp

提取包含目录

MSVS项目的包含目录一般配置在PropertyGroup节点下的IncludePath字段,提取命令如下:

xmlstarlet sel -t -v "//_:PropertyGroup/_:IncludePath" -n myProj.vcxproj

若项目针对不同构建配置(Debug/Release、x86/x64)设置了独立的包含目录,可在XPath中增加条件判断,筛选对应配置的PropertyGroup节点即可精准提取目标值。

内容的提问来源于stack exchange,提问作者tpb261

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:27:20