13

次のような XML があります。

<myVal>One</myVal>
<myVal>Two</myVal>
<myVal>Three</myVal>
<myVal>Four</myVal>
<myVal>Five</myVal>

それを XDocument にロードし、その XDocument の各 XElement を反復処理して、各要素の文字数をカウントしたいと考えています。

それを行う最善の方法は何ですか?

最初に、ルート要素を追加する必要があることに気付きました。そうしないと、XDocument.Parse() がそれを XML として解析できなくなります。だから私は追加しました:

<span>
        <myVal>One</myVal>
        <myVal>Two</myVal>
        <myVal>Three</myVal>
        <myVal>Four</myVal>
        <myVal>Five</myVal>
</span>

しかし、私がするとき:

foreach (XElement el in xDoc.Descendants())

el最初の から始まり、すべての を含み、 で終わる XML 全体が含ま<span><myVal>ます</span>

<myVal>One</myVal>XDocument を使用して各 XML 要素 (など) を反復処理するにはどうすればよいですか?

すべての XML 要素の名前が事前にわからないため、常に "myVal" という名前になるとは限りません。

4

2 に答える 2

18

doc.Root.Elements()(ルートノードの直接の子の場合、これは本当に必要なものだと思います)またはdoc.Root.Descendants()(の可能な子を含むすべての子孫が必要な場合)を使用し<myVal/>ます。

于 2013-03-15T13:30:59.667 に答える
2

このようにしてください:

string xml = "  <span><myVal>One</myVal><myVal>Two</myVal><myVal>Three</myVal><myVal>Four</myVal><myVal>Five</myVal></span>";
XmlReader xr = XmlReader.Create(new StringReader(xml));
var xMembers = from members in XElement.Load(xr).Elements() select members;

foreach (XElement x in xMembers)
{
    var nodeValue = x.Value;
}

nodeValueの値が表示 されると、One Two などを取得します

于 2013-03-15T13:50:34.603 に答える