使用 XElement 编辑属性名称

本文关键字:属性 编辑 XElement 使用 | 更新日期: 2023-09-27 18:34:26

所以我正在寻找一种在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 的第二部分(在"-"之后)有数字,其余部分有字母。我将如何删除第 01 卷 ID 的"-5"部分(即将其更改为:

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

不修改其他元素?(即堆栈)

这是我正在尝试的:

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

显然,这是大错特错...关于如何解决它的任何想法?

谢谢!

我没有找到太多直接处理这个问题的帮助,我试图放在一起的零碎并没有真正的帮助。

使用 XElement 编辑属性名称

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 工作方式的一些假设,并使正则表达式检查它是否以数字结尾,并替换在这种情况下的最后一个数字。

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