0

所以我正在寻找一种方法来编辑 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>

不修改任何其他元素?(IE 堆栈)

这是我正在尝试的:

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

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

谢谢!

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

4

2 回答 2

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 如何工作的假设,并让 Regex 检查它是否以数字结尾并在这种情况下替换最后的数字。

于 2012-05-17T20:40:54.313 回答
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);
于 2013-01-24T16:01:28.247 回答