J'essaye d'analyser le fichier XML suivant et rien de ce que je fais n'aboutit à autre chose que la racine ou le premier noeud.Impossible d'accéder à XML avec Linq
<?xml version="1.0" encoding="utf-8" ?>
<Report {attributes}>
<table1>
<Detail_Collection>
<Detail {attributes} />
<Detail {attributes} />
<Detail {attributes} />
</Detail_Collection>
</table1>
</Report>
Je suis en train d'obtenir une liste de Détail pour que je puisse obtenir les valeurs d'attributs, mais tout ce que j'ai essayé des résultats dans aucune donnée. Ma dernière tentative est celle-ci ...
var xml= XDocument.Load(FileDetails.FullName);
var xml1 = XDocument.Parse(xml.Root.FirstNode.ToString());
var xml3 = from e in custs.Root.Elements("Detail") select e;
var xml4 = from e in xml1.Elements("Detail") select e;
différent tentative
var xml = XDocument.Load(FileDetails.FullName);
var root = xml.Root;
var els = root.Descendants("Detail");
Les écrans ci-dessus dans la fenêtre immédiate:
root.Descendants ("Détail") {Système .Xml.Linq.XContainer.GetDescendants} nom: null auto: false System.Collections.Generic.IEnumerator.Current: null System.Collections.IEnumerator.Current: null
Le problème est avec les attributs de l'élément du rapport:
<Report p1:schemaLocation="Info_x0020_Tickets_x0020_Entered http://domain/ReportServer?%2fInfo+Reporting%2fInfo+Tickets+Entered&rs%3aCommand=Render&rs%3aFormat=XML&rs%3aSessionID=vcvb0p452bb3na45havjes55&rc%3aSchema=True" Name="Info Tickets Entered" textbox9="1247" xmlns:p1="http://www.w3.org/2001/XMLSchema-instance" xmlns="Info_x0020_Tickets_x0020_Entered">
Ceci est de SQL Server Reporting Server, je vais devoir Enlevez un par un et trouvez le coupable.
Ceci est la solution finale à ce problème Il peut y avoir une meilleure façon, mais une fois que les données sont chargées vous ne pouvez pas retirer facilement l'espace de noms.
//load the original document
var xml = XDocument.Load(FileDetails.FullName);
//remove all the superflouos data attributes
xml.Root.RemoveAttributes();
//turn into a string
var content = xml.Root.ToString();
//remove the official namespace, there is no easy way to remove the namespace after document has been loaded, so we'll replace it
var newXmlContent = content.Replace("<Report xmlns=\"Info_x0020_Tickets_x0020_Entered\">", "<Report>");
//parse the updated string into a workable document
var newXml = XDocument.Parse(newXmlContent).Root;
Ceci retourne un nouveau document XML qui peut être traité normalement.
Quels sont les attributs? – SLaks
Le problème réside dans les attributs de * Report * –
Quels sont les attributs dans le XML? – SLaks