ERRO AO CRIAR ARQUIVO XML

F001E 12/08/2013 16:54:32
#427435
Boa Tarde a Todos...
Tenho essa Rotina para criar um arquivo xml do TISS...

XmlDocument xmldoc = new XmlDocument();
XmlNode xmlnode = xmldoc.CreateXmlDeclaration([Ô]1.0[Ô], [Ô]ISO-8859-1[Ô], null);
xmldoc.AppendChild(xmlnode);
xmlnode = xmldoc.CreateElement([Ô][Ô], [Ô]ans:Cabecalho[Ô], [Ô][Ô]);

xmlnode = xmldoc.CreateElement([Ô][Ô], [Ô]ans:identificacaoTransacao[Ô], [Ô][Ô]);
XmlNode xmlNodeData = xmldoc.CreateElement([Ô]ans:tipoTransacao[Ô], null);
xmlNodeData.InnerText = [Ô]ENVIO_LOTE_GUIAS[Ô];
xmlnode.AppendChild(xmlNodeData);

xmldoc.AppendChild(xmlnode);
xmldoc.Save(txtFat_Arquivo.Text.Trim());

...mas da o erro da imagem e se eu tirar os dois ponto : de ans:Cabecalho e das demais tags daí gera o xml...mas eu preciso que as tags tenham os dois ponto senão a ANS não valida do arquivo..
Estou fazendo erro ? Existe outra forma de gerar o xml...
KERPLUNK 13/08/2013 09:09:03
#427447
Resposta escolhida
Não sei porque a necessidade de gerar o documento manualmente, mas uma maneira muito mais simples de se fazer isso é a serialização. Abaixo, uma classe exemplo:

[XmlRoot([Ô]ElementoRaiz[Ô], Namespace = [Ô]http://www.w3.org/2001/XMLSchema-instance[Ô])]
public class ArquivoTISS
{
[XmlElement([Ô]identificacaoTransacao[Ô])]
public string Id { get; set; }
[XmlElement([Ô]Cabecalho[Ô])]
public string Cabecalho { get; set; }
[XmlElement([Ô]tipoTransacao[Ô])]
public string Tipo { get; set; }


public void SerializeToFile()
{
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add([Ô]ans[Ô], [Ô]http://www.w3.org/2001/XMLSchema-instance[Ô]);


XmlSerializer serializer = new XmlSerializer(typeof(ArquivoTISS));
string Host = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Substring(6);
Host += [Ô]\\[Ô] + this.GetType().Name + [Ô].xml[Ô];
TextWriter tw = new StreamWriter(Host);
serializer.Serialize(tw, this, namespaces);
tw.Close();
}
}


Com ela criada, instancie a classe e serialize:

ArquivoTISS t = new ArquivoTISS();
t.Cabecalho = [Ô]XXX[Ô];
t.Id = [Ô]Identificacao[Ô];
t.Tipo = [Ô]tipo aqui[Ô];
t.SerializeToFile();


Pronto, na pasta onde sua aplicação está, deve ter um arquivo chamado [Ô]ArquivoTISS[Ô](o nome da classe), verifique o conteúdo dele e veja se é isso que você precisa.
F001E 13/08/2013 09:52:06
#427452
é...até então estava pensando em fazer na mão mesmo e ontem a noite eu vi algumas coisa com serialização e é bem melhor como você mencionou ae em cima....e é desse jeito que preciso....
Valews...
KERPLUNK 13/08/2013 10:00:56
#427453
Ótimo, agora basta montar a classe da maneira que você precisa e serializar. Mas esse arquivo, não tem um schema? Já esclarecendo, schema é um arquivo .xsd
Se tiver facilita ainda mais e garante 100% que vai estar sempre certinho.
F001E 14/08/2013 08:41:32
#427514
Reativando o Tópico...

Sim o arquivo tem schema e montei as classes atraves do schema pelo xsd.exe do Visual Studio...
KERPLUNK 14/08/2013 09:08:29
#427516
Ah, ok, era isso que queria saber.
Tópico encerrado , respostas não são mais permitidas