2016-08-09 22 views
1

das ist meine XML-DateiWie Tag-Namen ändern und Linq-to-xml

<tag> 
    <ImageObject Color="BlackWhite" FileRef="12.gif" Format="GIF" Rendition="HTML" Type="Linedraw" /> 
    <ImageObject Color="BlackWhite" FileRef="32.gif" Format="GIF" Rendition="HTML" Type="Linedraw"/> 
    <ImageObject Color="BlackWhite" FileRef="3.gif" Format="GIF" Rendition="HTML" Type="Linedraw"/> 
</tag> 

und der Ausgang ist etwas ähnlich wie diese

<tag> 
    <img src="12.gif" /> 
    <img src="32.gif" /> 
    <img src="3.gif" /> 
</tag> 

bisher mit Attribute bekommt dies mein Code . aber ich kann nicht das Attribut des img gesetzt, weil ich weiß nicht, wie das Attribut abzurufen fileref

XElement rootImg = XElement.Parse(xml string variable); 

IEnumerable<XElement> img = 
    from el in rootImg.Descendants("ImageObject").ToList() 
    where (string)el.Attribute("Format") != "" 
    select el; 

foreach (XElement el in img) 
{ 
    el.Name = "img"; 
    el.RemoveAttributes(); 
    el.SetAttributeValue("src", ""); 
} 

Antwort

3

Es gibt kein Attribut an diesem Punkt - es eine Zeile oben entfernt wird. Stattdessen können Sie verwenden folgende:

foreach (XElement el in img) 
{ 
    var fileRef = el.Attribute("FileRef"); 
    el.Name = "img"; 
    el.RemoveAttributes(); 
    el.SetAttributeValue("src", fileRef.Value); 
} 
+0

Danke ,. Dein Code funktioniert – codequery18

1

Zuerst erstellen XElement Objekt und Analysieren Sie die XML-Datei, die zweite take Objekt von Enumerable (img) finden Formiat als el Jetzt foreach-Schleife schreiben für Attribute von img (IEnumrable) bekommen und setAttributeValue .So Schließlich sieht Ihr Code wie folgt aus.

XElement rootImg = XElement.Parse(xml string variable); 

IEnumerable<XElement> img = 
    from el in rootImg.Descendants("ImageObject").ToList() 
    where (string)el.Attribute("Format") != "" 
    select el; 



foreach (XElement el in img) 
{ 
    var fileRef = el.Attribute("FileRef"); 
    el.Name = "img"; 
    el.RemoveAttributes(); 
    el.SetAttributeValue("src", fileRef.Value); 
}