要素を別の要素にネストする目的および/または(属性を作成/削除するための読みやすさの向上以外の)利点は何ですか?
私が言及しているものの例(私は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
作成中の要素に属性または子を追加する場合は、属性が重要ですこれが今より理にかなっていることを願っています。最初に間違った答えを出してすみません。