Pergunta

Estou criando XML usando Linq para XML e C #. Tudo funciona muito bem exceto quando eu preciso adicionar manualmente em uma linha no XML. Esta linha é adicionada somente se eu tiver um valor para passar para ele, caso contrário eu simplesmente ignorar a tag inteira.

Eu uso XElement.Load de carga na cadeia de texto que eu armazenar em uma corda, mas quando eu anexá-lo ao XML ele sempre coloca em xmlns = "" no final da minha tag.

Existe uma maneira eu posso dizer XElement.Load usar o namespace existente ou para ignorá-lo ao colocar na cadeia para o XML?

Idealmente, eu só quero a minha string a ser incluído para o XML que está sendo criado sem tags extras sendo adicionados.

Abaixo está uma amostra do que eu atualmente fazer:

string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";

Quando eu construir o XML eu carregar a seqüência acima em meu XML. É aqui onde xmlns = "" está sendo adicionado ao valor XMLDetails mas idealmente eu quero isso ignorado, pois está causando problemas com o destinatário quando tentam ler este tag.

XNamespace ns = "http://namespace-address";
    XNamespace xsi = "http://XMLSchema-instance-address";

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            new XElement(ns + "OpeningTAG",

... Meu código XML ...

XElement.Load(new StringReader(XMLDetails))

... End of Code XML ...

Como mencionado acima. Meu código funciona, XML saídas com sucesso para mim. Sua apenas a MyNewTag tag I carga em usar XElement.Load recebe xmlns = "" adicionado ao final do mesmo que está me causando um problema.

Alguma idéia de como posso resolver isso? Obrigado por sua ajuda.

Saudações, Rica

Foi útil?

Solução

Como sobre: ??

XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
                                      withoutNamespace.Nodes());

Como uma alternativa melhor - por que você não quer incluir o namespace quando você está construindo o XML, ou melhor ainda, criar um XElement em vez de gerar manualmente uma seqüência de caracteres XML que você então ler. Manualmente criar XML é muito raramente uma boa idéia. Além de qualquer outra coisa, você está assumindo que ValuePassedThrough já escapou, ou não precisa escapar etc. Isso pode ser válido -. Mas é pelo menos um motivo de preocupação

Outras dicas

Como este

XElement XMLDetails = new XElement(ns + "OpeningTAG", new XElement(ns + "MyNewTag", new XAttribute("Code", 14), new XAttribute("Value", 123)));

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            XMLDetails));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top