gpt4 book ai didi

xml - WiX XmlConfig : Purpose for nesting XmlConfig in XmlConfig

转载 作者:数据小太阳 更新时间:2023-10-29 01:48:51 31 4
gpt4 key购买 nike

XmlConfig 元素嵌套在另一个 XmlConfig 中的目的和/或收获是什么(除了增加创建/删除属性的可读性)> 元素?

我所指的示例(我使用的是 WiX 3.6):

<util:XmlConfig ...>
<util:XmlConfig ... />
</util:XmlConfig>

最佳答案

简短的回答:嵌套 <util:XmlConfig> 选项的唯一目的elements 是为了能够以更具可读性的方式向新创建的元素添加/删除属性。所以,这基本上就是您的假设。

考虑以下初始 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 attribute 应该指向你要添加属性的父元素,这也很奇怪,因为它也可以从嵌套代码中“猜到”

无论如何,如果您确实想要创建一个 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属性很重要,以防您向同时创建的元素添加属性或子元素

希望现在这更有意义。对于最初给出的错误答案,我们深表歉意。

关于xml - WiX XmlConfig : Purpose for nesting XmlConfig in XmlConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869589/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com