1

専門家のためにxmlの要素を置き換える方法について質問したいのですが。

xmlは次のようなものです。

ソース:

<root>
    <elements>
        <element src="aaaa" />
        <element src="a" />
        <element src="aaa" />
    </elements>
</root>

私がしたいのは:

  1. src要素の値を見つけます。
  2. Convert(string value)メソッドを使用して、srcの値を文字番号に変換します。

元。aaaa => 4、a => 1、aaa => 3

  1. srcの値を置き換えます。

結果:

<root>
    <elements>
        <element src="4" />
        <element src="1" />
        <element src="3" />
    </elements>
</root> 
4

2 に答える 2

3

これはあなたが求めているものですか?

var source = "<root><elements><element src=\"aaaa\"/><element src=\"a\"/>" +
             "<element src=\"aaa\"/></elements></root>";

var doc = XElement.Parse(source);

foreach (var element in doc.Descendants("element"))
{
    element.Attribute("src").Value = element.Attribute("src").Value.Length.ToString();
}

結果:

<root>
  <elements>
    <element src="4" />
    <element src="1" />
    <element src="3" />
  </elements>
</root>
于 2012-05-26T08:09:47.323 に答える
1

他の回答で与えられたオプションのわずかな代替:

var attributes = doc.Descendants("element").Attributes("src");
foreach (var attribute in attributes)
{
    attribute.Value = attribute.Value.Length.ToString();
}

これは のAttributes拡張メソッドを使用しIEnumerable<XElement>ます。これにより、ループ内で属性をフェッチするよりもコードがわずかに単純になります。IMO - 代入演算子の左側と右側の両方で属性をフェッチするよりも確かに単純です。

(要素を見つけるときに、より具体的にしたい場合は、 を使用できますvar attributes = doc.Root.Element("elements").Elements("element").Attributes("src");。)

于 2012-05-26T08:21:56.523 に答える