Comment puis-je configurer l'attribut xmlns lors de l'utilisation XMLFile dans Wix 3

voix
4

J'ajoute des éléments à un fichier XML lors de l'installation en utilisant l'élément xmlFile:

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

Le fichier vide Je vous écris pour ressembler à ceci:

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

Après avoir exécuté le programme d'installation, je finis avec ceci:

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

Le problème est que l'attribut xmlns vide est primordial xmlns spécifié dans le noeud racine du fichier de sorte que l'élément de propriété n'est pas correctement reconnu par NHibernate.

Comment puis-je soit définir la valeur pour correspondre au nœud racine ou supprimer l'attribut xmlns?

J'ai passé un peu de temps à chercher une réponse le plus proche et je l'ai trouvé est « faire ce que vous feriez dans MSXML » qui ne m'a pas aidé car il ne dit pas comment le faire dans WiX (par exemple, quel attribut xmlFile utiliser).

EDIT Pour expliquer la réponse de Rob légèrement, dans un endroit où je peux utiliser le formatage agréable:

  • Vous ajoutez un fragment de document en définissant noeud = « document » sur l'élément XMLConfig.
  • Vous devez définir explicitement l'espace de noms, sinon vous obtenez la valeur par défaut d'un nouveau.
  • En outre, bien que vous ajoutez un « document », il ne semble pas fonctionner si vous spécifiez plus d'un élément. Vous obtenez une mystérieuse et complètement inutile « assistant d'installation a pris fin prématurément » erreur d'exécution.

Donc, mon code fixe ressemble à ceci:

<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>
Créé 26/08/2009 à 22:34
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

Je sais que cela est à des années plus tard, mais si quelqu'un d'autre vient à travers cela, je pense que la vraie solution est la suivante:

<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"/>

le changement est de Name="property"à Name="urn:nhibernate-configuration-2.2:property"- lorsque config est écrit , il sera apprear que comme il le reconnaîtra est l'espace de noms par défaut. J'ai eu le même problème régliez des fichiers manifestes et cette approche ont réglé.

Créé 14/04/2012 à 20:02
source utilisateur

voix
1

Le problème ici est que MSXML déclare que createElement vous donnera toujours l'espace de noms par défaut (comme vous le voyez). Je pense que vous aurez besoin de passer à la XMLConfig plus complexe mais plus puissant. Dans ce cas, essayez d'utiliser un fragment de document pour ajouter l'élément entier avec espace de noms correct au lieu de dépendre MSXML pour créer pour vous.

Créé 27/08/2009 à 02:00
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more