正在分析xml字符串以在中获取某些标记值
本文关键字:获取 xml 字符串 | 更新日期: 2023-09-27 18:20:28
我有一个xml字符串,里面有不同的记录,我想提取每个记录中的id。以下是xml:的示例
<UploadsInformation >
<Record>
<TaskGUID>48A583CA-A532-419A-9CDB-292764CEC541</TaskGUID>
</Record>
<Record>
<TaskGUID>ED6BA682-2BB2-4ADF-8355-9C605E16E088</TaskGUID>
</Record>
<Record>
<TaskGUID>D20D7042-FC5B-4CF7-9496-D2D9DB68CF52</TaskGUID>
</Record>
<Record>
<TaskGUID>F5DB10C5-D517-4CDA-8AAA-4E3F50B5FF3C</TaskGUID>
</Record>
</UploadsInformation>
这就是我所拥有的字符串,用于提取我需要的信息,但不确定它是否正确,因为当我调试时,字符串似乎是xml文件,而不仅仅是指定的guid。
string data = new XDocument(new XElement("Record",
uploads.Select(guid => new XElement("TaskGUID", guid.ToString()))))
.ToString();
上传为:List<Guid?> uploads
如果我正确理解你的问题,你想从源XML中提取Guid,你指出它是一个字符串。
您可以使用以下命令从字符串创建XDocument:
XDocument doc = XDocument.Parse(xmlString);
XNamespace ns = "http://schemas.acatar.com/2013/03/Malt.Models";
List<string> uploads = doc.Descendants(ns + "TaskGUID")
.Select(x => x.Value).ToList();
string uploadString = String.Join(",", uploads);
我使用XNamespace
是因为在XML中定义了一个名称空间(实际上是两个),除非在元素名称前面加上正确的名称空间,否则不会得到任何结果。
你也许可以把最后两个步骤合并成一行,但我不能百分之百确定。
上面的代码已经用您的示例进行了测试,并为uploadString
:生成了以下值
48A583CA-A532-419A-9CDB-292764CEC541,ED6BA682-2BB2-4ADF-8355-9C605E16E088,D20D7042-FC5B-4CF7-9496-D2D9DB68CF52,f5db10c517-4CDA-8aa-4E3F50B5FF3C
但是,如果要循环遍历结果并将每个结果单独传递给存储过程,我会跳过String.Join
,只循环遍历List:
foreach (string id in uploads)
{
// Do your stored procedure call for each Guid.
}
在回复评论时添加
在注释中的情况下,如果您有一个要获取其值的List,您基本上也会这样做,但在将其传递到存储的proc:之前,您需要检查是否为null,并(可能)将Guid转换为字符串
foreach (Guid? g in uploads)
{
if (g != null)
{
string newGuid = g.ToString();
// do your data access stuff here
}
}
您不能使用元素的本地名称,因为您已经声明了命名空间。因此,您应该使用名称空间来提供名称:
XNamespace ns = "http://schemas.acatar.com/2013/03/Malt.Models";
var guids = from r in xdoc.Root.Elements(ns + "Record")
select Guid.Parse((string)r.Element(ns + "TaskGUID"));
或者在不指定元素名称的情况下查询xml:
var guids = xdoc.Root.Elements()
.Select(r => Guid.Parse((string)r.Elements().Single()));
我认为这要么是你想要的,要么可能会为前进的方向提供一些线索:
string xml = ""; // XML data here
XDocument doc = XDocument.Parse(xml);
List<Guid> guids = doc.Descendants("TaskGUID")
.Select(g => new Guid(g.Value))
.ToList();