bsa*_*ara 6 xml wix wix-extension wix3.6
将元素嵌套到另一个元素中的目的和/或收益(除了增加创建/删除属性的可读性之外)是什么?
我所指的例子(我正在使用WiX 3.6):XmlConfigXmlConfig
<util:XmlConfig ...>
<util:XmlConfig ... />
</util:XmlConfig>
Run Code Online (Sandbox Code Playgroud)
Yan*_*nko 17
简短的回答:具有嵌套元素的选项的唯一目的<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>
Run Code Online (Sandbox Code Playgroud)
为了添加另一个<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>
Run Code Online (Sandbox Code Playgroud)
因此,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>
Run Code Online (Sandbox Code Playgroud)
这里要注意的事情:
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>
Run Code Online (Sandbox Code Playgroud)
将如下转换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>
Run Code Online (Sandbox Code Playgroud)
请注意以下事项:
XmlConfig元件被放置在相同的水平,尽管它们导致嵌套元素中生成的XMLSequence如果您将属性或子项添加到元素(也是正在创建),则该属性很重要希望现在这更有意义.对不起,最初给出了错误的答案.
| 归档时间: |
|
| 查看次数: |
3240 次 |
| 最近记录: |