5
我想通過應用xml轉換來清理heat.exe生成的wxs文件。通過應用xslt tranfsormation從wxs文件中刪除不需要的節點
以下是heat.exe的示例文件輸出。
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="APPFOLDER">
<Component Id="cmp78E9FF58917B1844F3E9315A285F3147" Guid="SOME-GUID">
<File Id="fil093D6D7CB723B5B62730D7B4E575F154" KeyPath="yes" Source="PQR.Some.dll" />
</Component>
<Component Id="cmp0B084126FAE7577FD84DB29766AC6C2B" Guid="SOME-GUID">
<File Id="filB20C8708D7EB02EDFBCC4D70F9FE7F8A" KeyPath="yes" Source="ABC.Another.dll" />
</Component>
<Component Id="cmp83BB1954DECD7D949AAE4ACA68806EC3" Guid="SOME-GUID">
<File Id="fil0E29FBFF7DB39F307A2EE19237A0A579" KeyPath="yes" Source="ABC.OneMore.dll" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="AppFiles">
<ComponentRef Id="cmp78E9FF58917B1844F3E9315A285F3147" />
<ComponentRef Id="cmp0B084126FAE7577FD84DB29766AC6C2B" />
<ComponentRef Id="cmp83BB1954DECD7D949AAE4ACA68806EC3" />
</ComponentGroup>
</Fragment>
</Wix>
我想刪除其子節點文件節點具有包含字符串「ABC」的源屬性的組件節點。我知道如何使用正確的匹配模式來找到這樣的節點。 因此,在我刪除組件節點之前,我想存儲該組件的Id,然後使用它刪除帶有我剛記錄的Id的ComponentRef節點。
有沒有一種方法可以實現這種XML轉換?我想我正在尋找一些東西,我可以創建一個變量'X'來存儲我刪除的Component節點的Id,並使用'X'來查找要刪除的ComponentRef節點。
這一個工作就像魅力。真棒@JLRishe。 – vaibinewbee 2013-03-11 02:07:30
這只是驚人的,馬上工作。謝謝 – sttaq 2013-04-04 16:18:08
如果你想刪除多個元素,只需要在匹配屬性中添加更多條件: '''''''xsl:key name =「kCompsToRemove」match =「wi:Component [contains(wi:File/@ Source,'。 nupkg')或包含(wi:File/@ Source,'my-debug-file')]「use =」@ Id「/> – HenningJ 2016-07-11 11:40:29