-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 element 表示可以有两个 X 元素,如 X1 和 X2

如果 total 的值为 5,则可以有 5 个 X 元素,例如 X1、X2、X3、X4 和 X5。

我需要动态解析和存储这些值。

有什么帮助吗?

4

2 回答 2

1

使用XmlDocument.SelectNodesXPath

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

我只能说,文件的设计很糟糕。你不应该命名你的元素来表明它们的位置。只需给他们一个通用名称,然后根据需要添加任意数量。

话虽如此,在您的情况下,您可以生成名称(假设它们始终是连续的)。

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 回答