-2

重複の可能性:
C# での XML 文字列の解析

以下の XML ファイルを処理し、要素の値を配列に格納する方法

  <UserID>
  <Total>2</Total>
  <X1>2</X1>
  <Y1>4</Y1>
  <Attached1>2,3,4</Attached1>
  <X2>7</X2>
  <Y2>8</Y2>
  <Attached2>4,5,6</Attached2>
  </UserID>

ここでは、要素 X1 と X2 を解析し、同じ配列に格納する必要があります。

同様に、Y1、Y2、および Attached1、Attached2 の要素を解析し、同じ配列に格納する必要があります。

このファイルは、動的に拡大または縮小する場合があります。

X1、X2 を X100 要素まで、または X1、X2 を X10 要素まで持つことができます。

いくつかの要素に制限されたくありません。

ここで Total 要素は、X1 と X2 のように 2 つの X 要素が存在できることを示します。

total の値が 5 の場合、X1、X2、X3、X4、X5 のような 5 つの X 要素が存在する可能性があります。

値を動的に解析して保存する必要があります。

何か助けはありますか?

4

2 に答える 2

1

XmlDocument.SelectNodesと の使用XPath:

XmlDocument document = new XmlDocument();
document.LoadXml("yourFile");

List<string> first = (from XmlNode node in document.SelectNodes("//X1 | //X2") 
                     select node.Value).ToList();
List<string> second = (from XmlNode node in document.SelectNodes("//Y1|//Y2|//Attached1|//Attached2") 
                      select node.Value).ToList();
于 2012-07-30T06:40:21.500 に答える
1

ドキュメントのデザインが悪いと言わざるを得ません。要素の位置を示すために要素に名前を付けるべきではありません。それらに共通の名前を 1 つ付けて、必要な数だけ追加します。

そうは言っても、あなたの場合、名前を生成できます(常に連続していると仮定します)。

var xmlStr = @"<UserID>
  <Total>2</Total>
  <X1>2</X1>
  <Y1>4</Y1>
  <Attached1>2,3,4</Attached1>
  <X2>7</X2>
  <Y2>8</Y2>
  <Attached2>4,5,6</Attached2>
</UserID>
";
var doc = XDocument.Parse(xmlStr);
var users =
    from user in doc.Descendants("UserID")
    let total = (int)user.Element("Total")
    select new
    {
        X = Enumerable.Range(1, total)
                      .Select(i => (int)user.Element("X" + i))
                      .ToArray(),
        Y = Enumerable.Range(1, total)
                      .Select(i => (int)user.Element("Y" + i))
                      .ToArray(),
        Attached = Enumerable.Range(1, total)
                             .Select(i => (string)user.Element("Attached" + i))
                             .ToArray(),
    };
于 2012-07-30T07:20:42.747 に答える