6

要素を別の要素にネストする目的および/または(属性を作成/削除するための読みやすさの向上以外の)利点は何ですか? 私が言及しているものの例(私はWiX 3.6を使用しています):XmlConfigXmlConfig

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

1 に答える 1

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>

それに別のものを追加するため<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作成中の要素に属性または子を追加する場合は、属性が重要です

これが今より理にかなっていることを願っています。最初に間違った答えを出してすみません。

于 2012-12-14T11:51:01.103 に答える