将一个元素嵌套在另一个元素中的目的和/或收获是什么(除了增加创建/删除属性的可读性)?
我所指的示例(我使用的是WiX 3.6):XmlConfig
XmlConfig
<util:XmlConfig ...>
<util:XmlConfig ... />
</util:XmlConfig>
将一个元素嵌套在另一个元素中的目的和/或收获是什么(除了增加创建/删除属性的可读性)?
我所指的示例(我使用的是WiX 3.6):XmlConfig
XmlConfig
<util:XmlConfig ...>
<util:XmlConfig ... />
</util:XmlConfig>
简短的回答:嵌套元素选项的唯一目的<util:XmlConfig>
是能够以更易读的方式向新创建的元素添加/删除属性。所以,这基本上是你的假设。
考虑以下初始 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<cars>
<car name="ford" type="minivan"/>
<car name="toyota" type="sedan"/>
<motos>
<moto name="honda" model="shadow" type="cruiser" />
</motos>
</cars>
为了向其中添加另一个<moto>
,可以使用以下 WiX 片段:
<util:XmlConfig Id="elem1" Action="create" ElementPath="cars/motos" File="$(var.XmlFilePath)" Node="element" On="install" Name="moto">
<util:XmlConfig Id="elem11" ElementId="elem1" Name="name" Value="yamaha" File="$(var.XmlFilePath)" />
<util:XmlConfig Id="elem12" ElementId="elem1" Name="type" Value="chopper" File="$(var.XmlFilePath)" />
</util:XmlConfig>
因此,XML 文件最终如下:
<?xml version="1.0" encoding="utf-8"?>
<cars>
<car name="ford" type="minivan"/>
<car name="toyota" type="sedan"/>
<motos>
<moto name="honda" model="shadow" type="cruiser" />
<moto name="yamaha" type="chopper" />
</motos>
</cars>
这里需要注意几点:
Action
属性不能在内部XmlConfig
元素中定义,这是合乎逻辑的 - 它与父元素之一相同Node
也不能定义属性,因为只允许使用属性File
每次都必须指定属性——这似乎是一个设计问题ElementId
属性应该指向您要添加属性的父元素,这也很奇怪,因为它也可以从嵌套代码中“猜测”出来无论如何,如果您确实想创建 XML 子树结构,那么最终在生成的 XML 中作为嵌套元素的元素是由XmlConfig
放置在同一级别的元素组成的。因此,以下代码段:
<util:XmlConfig Id="elem1" Action="create" ElementPath="cars/motos" File="$(var.XmlFilePath)" Node="element" On="install" Name="moto" Sequence="1">
<util:XmlConfig Id="elem11" ElementId="elem1" Name="name" Value="yamaha" File="$(var.XmlFilePath)" />
<util:XmlConfig Id="elem12" ElementId="elem1" Name="type" Value="chopper" File="$(var.XmlFilePath)" />
</util:XmlConfig>
<util:XmlConfig Id="elem2" Action="create" ElementPath="cars/motos/moto[\[]@name='yamaha'[\]]" File="$(var.XmlFilePath)" Node="element" On="install" Name="extra" Sequence="2">
<util:XmlConfig Id="elem21" ElementId="elem2" File="$(var.XmlFilePath)" Name="bags" Value="leather" />
</util:XmlConfig>
将按如下方式转换 XML:
<?xml version="1.0" encoding="utf-8"?>
<cars>
<car name="ford" type="minivan"/>
<car name="toyota" type="sedan"/>
<motos>
<moto name="honda" model="shadow" type="cruiser"/>
<moto name="yamaha" type="chopper">
<extra bags="leather"/>
</moto>
</motos>
</cars>
请注意以下事项:
XmlConfig
同一级别,尽管它们会在生成的 XML 中产生嵌套元素Sequence
元素添加属性或子元素,该元素也正在创建中希望这现在更有意义。很抱歉最初给出的错误答案。