我有一个XML文档,如下所示
<meta>
<field type="xs-string" name="Category">جداول</field>
<field type="struct" name="Images">
<field type="xs-string" name="FileName">A00000002.png</field>
<field type="xs-string" name="FileName">B00000002.png</field>
<field type="xs-string" name="FileName">C00000002.png</field>
</field>
</meta>
我想使用XDocument将A00000002.png B00000002.png C00000002.png提取为列表。我的代码是:
var images = (from title in doc.Root.Elements("field").Where(node => node.Attribute("name").Value.Equals("Images")) select (string)title.Value);
但它只返回一个字符串,其中所有图像名称彼此相邻...任何人都知道如何获取图像名称列表,而不会将字符串分开?
答案 0 :(得分:1)
你可以使用以下的分期付款代码
var node = doc.Descendants("field").Elements("field").Select(p=>p.Value);
这样您就可以获得图像列表名称。
O / P
你可以像
一样使用它 foreach (var item in node)
{
string value = item.ToString();
}
答案 1 :(得分:0)
使用Split()
函数获取字符串数组并在必要时将其转换为List:与您的案例相关,
string[] _arrImages = ((string)images).Split([separator])
其中separator是一个合适的分隔符char,例如('')。
如有必要,可以通过应用arrImages
函数将字符串数组_ List<string>
转换为_arrImages.ToList()
。 RGDS,
答案 2 :(得分:0)
问题在于你没有枚举Images
,而是返回它的内容,这是你显示的字符串。
试试这个:
var images = from title in doc.Root.Elements("field").Where(node => node.Attribute("name").Value.Equals("Images")).Descendants().Where( node => node.Attribute("name").Value.Equals("FileName")) select (string)title.Value;
它在第二个Where
中遍历子元素。
答案 3 :(得分:0)
尝试将Regex.Split
添加到您的查询结果中:
XElement rootElement = XDocument.Load(@"YourPath").Root;
var images = (from title in rootElement.Elements()
.Where(node => node.Attribute("name").Value.Equals("Images"))select (string)title.Value);
string[] GroupsItems = Regex.Split((string)images, "png");
答案 4 :(得分:0)
请尝试以下操作:
var mynode = doc.Descendants("field").Elements("field").Select(f=>f.Value);