2009-08-26 3 views
4

に属性を設定しない私は、XMLFILE要素を使用して、インストール時にXMLファイルに要素を追加してい:はどのように私はXMLFILEを使用した場合のxmlnsがウィックス3

<util:XmlFile Id="SetOracleDialectProperty" 
       Action="createElement" 
       ElementPath="//hibernate-configuration/session-factory" 
       Name="property" 
       Sequence="9" 
       File="[INSTALLLOCATION]Config\hibernate.config" 
       Value="NHibernate.Dialect.Oracle10gDialect"/> 

私はこのようなルックスに書いています空のファイル:

を問題が空であることを

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    <property xmlns="">NHibernate.Dialect.Oracle10gDialect</property> 
    </session-factory> 
</hibernate-configuration> 

:私はこれで終わるインストーラを実行した後

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
    </session-factory> 
</hibernate-configuration> 

xmlns属性がファイルのルートノードで指定されたxmlnsをオーバーライドしているため、プロパティ要素がnhibernateによって正しく認識されません。

ルートノードと一致するように値を設定するか、xmlns属性を削除するにはどうすればよいですか?

私は答えを探していましたが、私が見つけた最も近いものは「MSXMLでやることをやってください」というものです。これはWiXでのやり方を教えてくれません。使用するXmlFileの属性)。私は素敵な書式設定を使用することができる場所で、少しロブの答えを説明するために

EDIT

  • あなたはのXMLConfig要素にノード=「文書」を設定することで、ドキュメントフラグメントを追加します。
  • 明示的に名前空間を設定する必要があります。それ以外の場合は、デフォルトの名前空間に戻ります。
  • また、「ドキュメント」を追加していますが、複数の要素を指定しても機能しないようです。不思議で完全に役に立たない「セットアップウィザードが途中で終了しました」というランタイムエラーが発生します。

だから私の固定のコードは次のようになります。

<util:XmlConfig Id="MsSqlDialect" 
       Action="create" 
       ElementPath="//hibernate-configuration/session-factory" 
       File="[INSTALLLOCATION]Config\hibernate.config" 
       Node="document"> 
    <![CDATA[ 
    <property xmlns="urn:nhibernate-configuration-2.2" name="dialect">NHibernate.Dialect.Oracle10gDialect</property> 
    ]]> 
</util:XmlConfig> 

答えて

1

ここでの問題は、MSXMLはのcreateElementは常に(あなたが見ているだけのように)あなたのデフォルトの名前空間を与えることを述べていることです。より複雑で強力なXmlConfigに切り替える必要があると思います。この場合、MSXMLに依存するのではなく、正しい名前空間で要素全体を追加するために、ドキュメントフラグメントを使用してみてください。

2

私は、これは数年後である知っているが、誰がこの全体に来れば、私は真の解決策は、このだと思う:

<util:XmlFile Id="SetOracleDialectProperty" 
       Action="createElement" 
       ElementPath="//hibernate-configuration/session-factory" 
       Name="urn:nhibernate-configuration-2.2:property" 
       Sequence="9" 
       File="[INSTALLLOCATION]Config\hibernate.config" 
       Value="NHibernate.Dialect.Oracle10gDialect"/> 

変更がName="property"からName="urn:nhibernate-configuration-2.2:property"にある - 設定が書き込まれたとき、それはちょうどそれと同じくらいapprearますこれがデフォルトの名前空間であると認識します。私はマニフェストファイルを調整するのと同じ問題を抱えていました。

関連する問題