如何使用linq-to-xml更改标记名称和获取属性

时间:2016-08-09 06:29:05

标签: c# linq linq-to-xml

这是我的xml文件

ajax

,输出与此类似

<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>
到目前为止,这是我的代码。但是我无法设置img的属性,因为我不知道如何检索fileref的属性

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

2 个答案:

答案 0 :(得分:3)

此时没有属性 - 它在上面删除了一行。相反,您可以使用以下内容:

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

答案 1 :(得分:1)

首先创建XElement对象并解析XML文件,然后将对象Enumerable(img)找到formate作为el,现在编写foreach循环以获取来自img(IEnumrable)和setAttributeValue的属性。所以最后你的代码看起来像。

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);
}