是否可以使用XPath从processing-instruction('define')中提取值?

时间:2013-07-02 06:23:19

标签: xml xpath wix processing-instruction

我想从此代码中提取版本号:

<?xml version="1.0" encoding="UTF-8"?>
<Include>
  <?define ProductVersion = "1.0.0.0" ?>
</Include>

我希望输出为:1.0.0.0,是否可以执行此操作?

2 个答案:

答案 0 :(得分:2)

如果您使用Visual Studio创建基于WIX的安装程序,则可以在ProductVersion文件中定义.wixproj变量。

  <Target Name="BeforeBuild">
    <PropertyGroup>
      <DefineConstants>ProductVersion=1.0</DefineConstants>
      ...
    </PropertyGroup>
  </Target>

这可以通过$(var.ProductVersion)从.wxs文件访问。现在,您可以使用XPath从.wixproj文件中读取DefineConstants的值。这将为您提供ProductVersion = "1.0.0.0"

答案 1 :(得分:1)

您可以使用processing-instruction()节点过滤器访问处理指令内容。处理指令中没有定义语义,因此您无法直接查询“属性值”。

您可以使用此XPath(1.0)查询来使用字符串处理来获取值:

substring-before(substring-after(/Include/processing-instruction(), '"'), '"')