Question

Je crée XML en utilisant LINQ to XML et C #. Tout fonctionne très bien, sauf quand je dois ajouter manuellement dans une ligne dans le fichier XML. Cette ligne est ajoutée si je n'ai une valeur de passer à travers, sinon j'ignorer que toute balise.

J'utilise XElement.Load pour charger dans la chaîne de texte que je stocke dans une chaîne, mais quand je le joindre au XML, il met toujours en xmlns = « » à la fin de mon tag.

Est-il possible que je peux dire XElement.Load d'utiliser l'espace de noms existant ou de l'ignorer lors de la mise dans la chaîne à XML?

Idéalement, je veux juste que ma chaîne à inclure le XML en cours de création sans balises supplémentaires ajoutés.

Voici un exemple de ce que je fais actuellement:

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

Quand je construis le XML que je charge la chaîne ci-dessus dans mon XML. Il est là où xmlns = « » est ajoutée à la valeur de XMLDetails mais idéalement, je veux que ce ignoré car il est à l'origine des problèmes avec le destinataire quand ils essaient de lire cette balise.

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

... Mon code XML ...

XElement.Load(new StringReader(XMLDetails))

... Fin du code XML ...

Comme mentionné ci-dessus. Mon code fonctionne, il sort avec succès XML pour moi. Son juste la balise MyNewTag je charge à l'aide XElement.Load obtient xmlns = « » ajouté à la fin de celui-ci qui me cause un problème.

Toutes les idées comment je peux travailler autour de cela? Merci pour votre aide.

Cordialement, Rich

Était-ce utile?

La solution

Que diriez-vous:

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

En tant que meilleure alternative - pourquoi ne pas non plus inclure l'espace de noms lorsque vous construisez le XML, ou mieux encore, créer un XElement au lieu de générer manuellement une chaîne XML que vous avez lu alors. Création manuelle XML est très rarement une bonne idée. En dehors de toute autre chose, vous en supposant que ValuePassedThrough a déjà été échappé ou n'a pas besoin d'échapper etc. Ce peut valable -. Mais il est au moins une source de préoccupation

Autres conseils

Comme cette

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top