WiX XmlConfig:用于在XmlConfig中嵌套XmlConfig

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

我所指的例子(我正在使用WiX 3.6):

<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属性很重要,该元素也是正在创建的

希望现在这更有意义.对不起,最初给出了错误的答案.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇