2012-05-17 4 views
0

Так что я ищу способ редактировать описания отдельных элементов в файле XML.Использование XElement для редактирования имен атрибутов

Например, у меня есть:

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 имеет нечетное формат ... вторая часть идентификатора (после «-») имеет номера, где это у остальных есть буквы. Как будет идти об удалении только «-01» часть идентификатора книги 5 (т.е. изменить его на:

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

без изменения Eny других элементов (стек 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; 
    } 
} 

Очевидно, что это ужасно неправильно ... Любые идеи о том, как это исправить

Спасибо

?! 210

Я не нашел большой помощи в решении этой проблемы, и кусочки, которые я пытаюсь собрать, на самом деле не помогают.

ответ

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, если она заканчивается цифрой и заменяет окончательные цифры в этом случае.

+0

Так что у меня много проблем, когда выясняется, как получить только имя элемента ... вся помощь, которую я могу найти, - это получить содержимое элемента. Как я могу просто получить ? – gfppaste

+0

@gfppaste: 'bookID' в моем примере - это' XElement', который содержит ' Title'. – Guvante

+0

Ой, хорошо, я понял. Ха-ха, спасибо, мне нужен был умственный толчок! – gfppaste

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