正在从元素中删除属性
本文关键字:删除 属性 元素 | 更新日期: 2023-09-27 17:58:04
我将从代码开始。。。
private static void File()
{
wixFile = XDocument.Load(filePath);
var fileElements = from file in wixFile.Descendants(GetWixNamespace() + "File")
select file;
foreach (var file in fileElements)
{
if(file.Attributes("Name").Any())
file.Attribute("Name").Remove();
}
wixFile.Save(filePath);
}
事实上,我检查了列表中的一些属性,并删除或更正了它们,但为了简短起见,除了一个我正在做的事情之外,我把所有的东西都去掉了。我遇到的问题是,这段代码并没有像我预期的那样删除Name属性。当我插入一个断点并观察它时,"文件"会按预期更新,但当我保存时(或在编辑过程中),更改不会转移到wixFile。我不完全确定我在这里错过了什么,所以任何帮助都将不胜感激。
编辑:
以下是正在更改的代码片段:
<?define ApplicationPath=''dwdata'develope'DocuWare'DW5'Mast_dsk'?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Directory Id="DATADIR" Name="data">
<Directory Id="mysql" Name="mysql">
<Component Id="procs_priv.MYI" Guid="{1148181A-4818-434F-B2D1-E4B417586168}">
<File Id="procs_priv.MYI" Name="procs_priv.MYI" KeyPath="yes" Source="$(var.ApplicationPath)Common'MySql'Server'data'mysql'procs_priv.MYI" />
</Component>
<Component Id="procs_priv.MYD" Guid="{A6688F48-71AF-4242-B6D0-CA69452A01B4}">
<File Id="procs_priv.MYD" Name="procs_priv.MYD" KeyPath="yes" Source="$(var.ApplicationPath)Common'MySql'Server'data'mysql'procs_priv.MYD" />
</Component>
<Component Id="procs_priv.frm" Guid="{3025C26C-8DFF-43D4-A62A-79E78D2D807D}">
<File Id="procs_priv.frm" Name="procs_priv.frm" KeyPath="yes" Source="$(var.ApplicationPath)Common'MySql'Server'data'mysql'procs_priv.frm" />
</Component>
<Component Id="proc.MYI" Guid="{FD4AA2E1-E059-4549-AE61-222878185A0A}">
<File Id="proc.MYI" Name="proc.MYI" KeyPath="yes" Source="$(var.ApplicationPath)Common'MySql'Server'data'mysql'proc.MYI" />
</Component>
<Component Id="proc.MYD" Guid="{12EE6EE8-AC44-4601-84C5-14B27CF9A3E6}">
<File Id="proc.MYD" Name="proc.MYD" KeyPath="yes" Source="$(var.ApplicationPath)Common'MySql'Server'data'mysql'proc.MYD" />
</Component>
<Component Id="proc.frm" Guid="{8A6F2928-5484-4B55-B75F-8475C684A091}">
<File Id="proc.frm" Name="proc.frm" KeyPath="yes" Source="$(var.ApplicationPath)Common'MySql'Server'data'mysql'proc.frm" />
</Component>
</Directory>
</Directory>
</Wix>
我也得到了完全相同的东西。我想做的是删除"Name"属性,但无论出于何种原因,它都不起作用。GetWiXNamespace()方法返回与XNamespace在wix元素中列出的名称空间相同的名称空间。
我将从这里的字里行间阅读,并猜测您正在从旧版本的WiX(比如2.0)转换,该版本需要File@Name属性到一个版本(比如3.0-3.6),该版本可以推断该属性而不需要它。
以下是我刚刚编写的一些代码,我知道这些代码在假设源xml是WiX3.x的情况下有效。我不确定你的代码出了什么问题,但可能返回命名空间的方法没有考虑到url的变化。
XNamespace ns = "http://schemas.microsoft.com/wix/2006/wi";
var doc = XDocument.Load(@"C:'before.wxs");
var elements = from element in doc.Descendants( ns + "File")
where element.Attribute("Name") != null
select element;
foreach (var element in elements)
{
element.Attribute("Name").Remove();
}
doc.Save(@"C:'after.wxs");
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define SourceDir="."?>
<Module Id="YourModuleHere" Language="1033" Version="1.0.0.0">
<Package Id="31c7722e-c2a0-4328-92a2-eacd443c10a9" Manufacturer="YourCompanyHere" InstallerVersion="200" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="MergeRedirectFolder">
<Component Id="owc7CEF9B0C53324FC23404D2AAAB5D12B8" Guid="6898e947-fa51-8efb-bda4-2e256dea8ed1">
<File Id="owf7CEF9B0C53324FC23404D2AAAB5D12B8" Name="bfsvc.exe" Source="$(var.SourceDir)'Windows'bfsvc.exe" KeyPath="yes" />
</Component>
<Component Id="owc8C6EA26177072C0006EEF8265FEF72A4" Guid="91737806-0b20-24ad-9653-cca05b5778fb">
<File Id="owf8C6EA26177072C0006EEF8265FEF72A4" Name="explorer.exe" Source="$(var.SourceDir)'Windows'explorer.exe" KeyPath="yes" />
</Component>
</Directory>
</Directory>
</Module>
</Wix>