Ajouter un attribut xmlns à l'élément racine
J'ai le C# pour Générer Fichier RDL, Pour lequel Afficher le rapport dans Reporting services.
J'ai utiliser Linq to Xml pour générer le Xml.
Lorsque j'essaie d'ajouter xmlns XAttribute à l'Élément de Rapport, je rencontre plusieurs problèmes.
- Je tester des méthodes suivantes:
première:
XDocument d = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement("Report",
new XAttribute(XNamespace.Xmlns + "rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"),
new XAttribute(XNamespace.Xmlns + "cl", "http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition"),
new XAttribute("xmlns", "http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition"),
new XElement("DataSources", ""),
new XElement("DataSets", ""),
new XElement("ReportSections",
c'est une partie de mon code sorcière montrer comment générer du code xml:
deuxième:
XNamespace reportDef = "http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition";
XDocument d = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement(reportDef + "Report",
new XAttribute(XNamespace.Xmlns + "rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"),
new XAttribute(XNamespace.Xmlns + "cl", "http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition"),
new XElement("DataSources", ""),
new XElement("DataSets", ""),
new XElement("ReportSections",...
La première méthode retourne une Erreur et la deuxième méthode permet d'ajouter l'attribut xmlns à tous les nœuds enfants.
Je veux que ce format:
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
OriginalL'auteur Amir Reza | 2012-05-12
Vous devez vous connecter pour publier un commentaire.
Essayer de vous ajouter des nœuds enfants à l'aide de la
XNamespace
comme décrit dans Comment: Créer un Document avec des espaces de noms (C#) (LINQ to XML)Cela devrait vous donner le résultat souhaité.
Vous pouvez également ajouter un espace de noms par défaut en ajoutant un
xmlns
attributSemble bizarre, car je ne peux pas reproduire ce. Essayez d'ajouter de l'espace de noms par défaut de l'attribut comme dans mon deuxième exemple. Peut-être mettre à jour votre question et de montrer plus de votre code.
Malheureusement, comme avant
Si vous avez des exemples comme cela, merci de nous l'envoyer pour moi.
OriginalL'auteur Filburt
Vous pouvez le voir sur @Filburt la réponse de cette post, que l'attribut xmlns est un attribut spécial. Il ne peut être accédé par le biais de XNamespace classe.
Ci-dessous je vais vous donner un exemple sur la façon de créer des espaces de noms. Vous devriez regarder Comment: Créer un Document avec des espaces de noms pour plus d'informations. La raison pour laquelle le code est l'ajout d' xmlns balises pour tous les enfants est parce que vous ne sont pas la création de tous les nœuds enfants dans le même espace de noms.
XNamespace
(voir ns1 ci-dessous) et ajouter de la valeur pour le nom de l'élément. Ex:new XElement(ns1 + "Report");
Cela crée un élément<Report>
dans le ns1 espace de noms et n'ont pas de préfixe.Pour ajouter d'autres espaces de noms, ajouter un attribut avec l'espace de noms et un préfixe. Par exemple,
new XAttribute(XNamespace.Xmlns + "ns2", ns2)
ajoute un espace de noms à l'<Report>
élément avec lans2
préfixe. Après cela, chaque fois que vous créez un élément (new XElement(ns2+"DataSources")
) avec le ns2 espace de noms, le préfixe sera utilisé. Le préfixe peut être utilisé dans tous les descendants en dessous de l'élément avec le préfixe de la déclaration. C'est là que vous avez fait une erreur.J'ai ajouté un exemple et pris note de votre erreur. Fondamentalement, vous avez besoin de mettre
new XElement(reportDef+"DataSources", "")
au lieu denew XElement("DataSources", "")
. L'espace de noms qui manquait dans les enfants de sorte qu'ils avaient finissent dans le vide de l'espace de noms.OriginalL'auteur user845279