Como faço para definir o atributo xmlns quando usando XMLFile no Wix 3

votos
4

Estou adicionando elementos para um arquivo XML durante a instalação usando o elemento 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/>

O arquivo vazio Estou escrevendo para esta aparência:

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

Depois de executar o instalador eu acabar com esta:

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

O problema é que os xmlns vazias atribuem está substituindo os xmlns especificados no nó raiz do arquivo de modo que o elemento de propriedade não é reconhecido corretamente pelo nhibernate.

Como eu pode definir o valor para coincidir com o nó raiz ou remover o atributo xmlns?

Eu passei algum tempo à procura de uma resposta e o mais próximo que eu encontrei é fazer o que você faria em MSXML o que não me ajudar, pois não diz como fazê-lo em WiX (por exemplo, o atributo em XMLFILE usar).

EDIT Para explicar a resposta de Rob ligeiramente, em um lugar onde eu posso usar formatação agradável:

  • Você adicionar um fragmento de documento definindo Node = documento no elemento XMLConfig.
  • Você tem que definir explicitamente o namespace de outra forma você começa o padrão novamente.
  • Além disso, embora você está adicionando um documento não parece funcionar se você especificar mais de um elemento. Você recebe um misterioso e completamente inútil Assistente de configuração terminou prematuramente erro de execução.

Então, meu código fixo parece com isso:

<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>
Publicado 26/08/2009 em 22:34
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Eu sei que isso é anos mais tarde, mas se alguém se depara com isso eu acho que a verdadeira solução é esta:

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

mudança é de Name="property"que Name="urn:nhibernate-configuration-2.2:property"- quando configuração está escrito ele irá apprear como apenas como ele vai reconhecê-lo é o namespace padrão. Eu tive o mesmo problema ajustando arquivos de manifesto e esta abordagem classificados.

Respondeu 14/04/2012 em 20:02
fonte usuário

votos
1

O problema aqui é que MSXML afirma que createElement sempre lhe dará o namespace padrão (assim como você está vendo). Eu acho que você vai precisar para mudar para o XMLConfig mais complexo, mas mais poderoso. Neste caso, tente usar um fragmento de documento para adicionar o elemento inteiro com namespace correto ao invés de depender de MSXML para criá-lo para você.

Respondeu 27/08/2009 em 02:00
fonte usuário

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