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の2番目の部分(「-」の後)には数字があり、残りの部分には文字があります。ブック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がどのように機能するかについてのいくつかの仮定を修正し、正規表現チェックで数字で終わるかどうかを確認し、その場合は最後の数字を置き換えます。

于 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 に答える