这是我的XML,
<content id = "C1">
<paragraph >
<Info />
<contentValue>Content1</contentValue>
</paragraph>
<paragraph>
<Info />
<contentValue>Content2</contentValue>
</paragraph>
<content>
<content id = "C2">
<paragraph >
<Info />
<contentValue>Content3</contentValue>
</paragraph>
<paragraph>
<Info />
<contentValue>Content4</contentValue>
</paragraph>
<paragraph>
<Info />
<contentValue>Content5</contentValue>
</paragraph>
<content>
我需要解析每个<content>
代码并获取<contentvalue>
代码的值并将其存储在List中。
我正在使用以下代码,但<contentvalue>
代码的值会像' Content1Content2 '
var xdoc = XDocument.Load(path);
var Contents = xdoc.Descendants("content").Select(c => (string)c).ToArray();
答案 0 :(得分:1)
如果您不希望<contentValue>
按<content>
标记分组,请尝试:
<强> V1 强>
var Contents = xdoc.Descendants("contentValue").Select(c => (string)c).ToArray();
或 的 V2 强>
var Contents = xdoc.Root.XPathSelectElements("content/paragraph/contentValue")
.Select(x => x.Value).ToList();
注意,要使用 V2 解决方案,您需要添加对System.Xml.XPath
命名空间的引用。
(下一节代表一个不同的解决方案,针对不同但相似的案例,仅供参考)
否则,如果您需要获取按<content>
标记分组的值,则可以尝试:
var grouped = xdoc.Descendants("contentValue")
.Select(x => new { PNode = x.Ancestors("content")
.FirstOrDefault().Attribute("id").Value, CNode = x.Value })
.GroupBy(x => x.PNode).ToDictionary(x => x.Key, y => y.ToList());
然后可以按如下方式迭代:
foreach (var group in grouped)
{
Console.WriteLine("content id = " + group.Key);
foreach (var singleCValue in group.Value)
{
Console.WriteLine(singleCValue.CNode);
}
}
答案 1 :(得分:1)
我发现了一些事情:
<root>
<content id="C1">
<paragraph>
<Info/>
<contentValue>Content1</contentValue>
</paragraph>
<paragraph>
<Info/>
<contentValue>Content2</contentValue>
</paragraph>
</content>
<content id="C2">
<paragraph>
<Info/>
<contentValue>Content3</contentValue>
</paragraph>
<paragraph>
<Info/>
<contentValue>Content4</contentValue>
</paragraph>
<paragraph>
<Info/>
<contentValue>Content5</contentValue>
</paragraph>
</content>
</root>
var Contents = xdoc.Descendants("content").Descendants("paragraph").Select(i => i.Element("contentValue").Value).ToList();
上面的代码正好选择contentValue
下的paragraph
节点。
答案 2 :(得分:0)
我猜你的标签形成不好。你可以做这样的事情。
XDocument doc = XDocument.Load(path);
IList<string> list=new List<string>();
IEnumerable<XElement> contentElements = doc.Descendants("content");//this get all "content" tags
IEnumerable<XElement> contentValueElements = contentElements.Descendants("contentValue");//this get all "contentValue" tags
foreach (XElement i in contentValueElements)
{
list.Add(i.Value);
}