使用XElement编辑属性名称

时间:2012-05-17 20:35:11

标签: c# .net xelement

所以我正在寻找一种在XML文件中编辑单个元素描述的方法。

例如,说我有:

1  <stack id ="1">Stack1</stack>
2  <book id="EG-FE">This Book</book>
3  <book id="EG-FF">That Book</book>
4  <book id="FE-GT">Another Book</book>
5  <book id="JL-01">Invalid Book Id</book>
6  <stack id="2">Stack2</stack>

你会注意到第5行的书有一个奇怪的格式...... id的第二部分(在' - '之后)有数字,其余的都有字母。我怎样才能删除第5册id的'-01'部分(即改为:

5  <book id="JL">Valid Book Id</book>

没有修改eny其他元素? (I.E.堆栈)

以下是我正在尝试的内容:

using System.Xml.Linq

XElement books = XElement.Load("{file}");

string _Attribute;
foreach (var bookID in books.Nodes()) 
{
    if(bookID.Attribute("book") )
    {
        _Attribute = bookID.Attribute("book")
        if(!Regex.IsMatch(_Attribute., @"^[a-zA-Z-]+$");
        {
            Regex.Replace(_Attribute, @"\d", "");
        }
        bookID.Attribute("book") = _Attribute;
    }
}

显然,这是非常错误的......关于如何修复它的任何想法?

谢谢!

我没有找到太多帮助直接处理这个问题,我试图整理的点点滴滴并没有真正帮助。

2 个答案:

答案 0 :(得分:2)

using System.Xml.Linq

XElement books = XElement.Load("{file}");

string _Attribute;
foreach (var bookID in books.Elements("book")) 
{
    if(bookID.Attribute("id") != null)
    {
        _Attribute = bookID.Attribute("book").Value;
        if(!Regex.IsMatch(_Attribute, @"-[0-9]+$"))
        {
            Regex.Replace(_Attribute, @"-[0-9]+$", "");
        }
        bookID.Attribute("id").Value = _Attribute;
    }
}

未经测试以及所有常用评论。修复了一些关于Linq to XML如何工作的假设,并使正则表达式检查它是否以数字结尾并替换最终数字。

答案 1 :(得分:0)

string strHtml = "<input Type=\"Text\" Name=\"Initial Name Value\" Id=\"ID Value\" />";
XElement root = XElement.Parse(strHtml); // Carrega o Bicho...

root.SetAttributeValue("ValueA", 1); // New Attribute - Int Value

root.SetAttributeValue("ValueC", 3); // New Attribute - Int Value
root.SetAttributeValue("ValueC", null); // Remove Attribute

root.SetAttributeValue("ValueA", "New value for ValueA");

root.SetAttributeValue("Name", "New Name"); // Alterando Value propriedade recebida no Parse()

Console.WriteLine(root);