C# 正在分析xml字符串以获取其中的特定标记值

C# 正在分析xml字符串以获取其中的特定标记值,c#,xml-parsing,C#,Xml Parsing,我有一个xml字符串,其中有不同的记录,我想在每个记录中提取id。以下是xml的一个示例: <UploadsInformation > <Record> <TaskGUID>48A583CA-A532-419A-9CDB-292764CEC541</TaskGUID> </Record> <Record> <TaskGUID>ED6BA682-2BB2-4A

我有一个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>

上传是:
列表上传

我想这可能是你想要的,也可能有助于你了解未来的发展方向:

string xml = "";  // XML data here

XDocument doc = XDocument.Parse(xml);

List<Guid> guids = doc.Descendants("TaskGUID")
                         .Select(g => new Guid(g.Value))
                         .ToList();
stringxml=”“;//这里的XML数据
XDocument doc=XDocument.Parse(xml);
列表GUID=文档子体(“任务GUID”)
.选择(g=>newguid(g.Value))
.ToList();

我认为这可能是您所追求的目标,也可能会为您指明前进的方向:

string xml = "";  // XML data here

XDocument doc = XDocument.Parse(xml);

List<Guid> guids = doc.Descendants("TaskGUID")
                         .Select(g => new Guid(g.Value))
                         .ToList();
stringxml=”“;//这里的XML数据
XDocument doc=XDocument.Parse(xml);
列表GUID=文档子体(“任务GUID”)
.选择(g=>newguid(g.Value))
.ToList();

如果我正确理解了您的问题,您希望从源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);
在回复评论时添加

在注释中的情况下,如果您有一个要获取其值的列表,则基本上也会这样做,但您需要检查是否为空,并(可能)在将Guid传递到存储过程之前将其转换为字符串:

foreach (Guid? g in uploads)
{

    if (g != null)
    {

        string newGuid = g.ToString();

        // do your data access stuff here
    }
}

如果我正确理解了您的问题,那么您希望从源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);
在回复评论时添加

在注释中的情况下,如果您有一个要获取其值的列表,则基本上也会这样做,但您需要检查是否为空,并(可能)在将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()));

您不能使用元素的本地名称,因为您已经声明了名称空间。因此,您应该使用名称空间来提供名称:

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()));


您希望有一个
列表作为最终结果吗?@Bazzz是的,因为在您使用当前查询创建新的XML文档时,我很可能会有一个TaskGuid列表循环,这就是您看到XML的原因。您希望查询的最终结果是什么?“TaskGUID”中来自源XML的值?@Tim yes只是
TaskGUID
值,因为我将在后面的步骤中使用这些值作为参考。@loop852将
List
作为最终结果没有多大意义,一个
Guid?
null的特定
对象在您看来有什么用途?也许
列表
是一种更好的方法?您希望有一个
列表
作为最终结果吗?@Bazzz是的,因为我很可能会有一个taskguid列表循环通过您正在使用当前查询创建一个新的XML文档,这就是您看到XML的原因。您希望查询的最终结果是什么?“TaskGUID”中来自源XML的值?@Tim yes只是
TaskGUID
值,因为我将在后面的步骤中使用这些值作为参考。@loop852将
List
作为最终结果没有多大意义,一个
Guid?
null的特定
对象在您看来有什么用途?也许
列表
是一种更好的方法?xdoc代表什么?XDocument?@loop852是的,
var XDocument=XDocument.Parse(xml)
@lazyberezovsky-在第二个查询结束时,您缺少一个结束语:)第三个)将在Select处结束。xdoc代表什么?XDocument?@loop852是的,
var xdoc=XDocument.Parse(xml)
@lazyberezovsky-您在第二个查询结束时缺少一个结束:)第三个)将在Select处关闭。太好了-我刚刚注意到在另一个地方,我正在传递一个
列表上传
作为参数,guid列表如下:
List guidID=new List添加(新Guid(“48A583CA-A532-419A-9CDB-292764CEC541”));
我如何循环遍历它们并提取每一个来将每个guid单独传递到循环中的存储过程中?同样的方法-只需在列表中的每个循环中使用一个for-each来获取该列表中的每个guid。虽然在这种情况下,由于列表中有guid?,您需要检查null,并且还需要(很可能)将Guid转换为字符串(
string g=new Guid(stringValue);
是一种方法)。如果您可以添加用于循环通过Guid并将列表分配到字符串中的结构,则可能出现这种情况。是否要从列表中的所有Guid中生成一个字符串?在这种情况下,您可以使用
string。使用列表中您选择的分隔符连接
string newGuid=newGuid(g)
告诉我有无效的参数。我应该在末尾添加一个.ToString()吗?太好了-我刚刚注意到在另一个地方我将一个
列表上传作为参数传递,GUI列表如下:
List guidID=new List();guidID.add(新Guid(“48A583CA-A532-419A-9CDB-292764CEC541”));
我如何循环遍历它们并提取每一个来将每个guid单独传递到循环中的存储过程中?同样的方法-只需在列表中的每个循环中使用一个for-each来获取该列表中的每个guid。虽然在这种情况下,由于列表中有guid?,您需要检查null,并且还需要(很可能)将Guid转换为字符串(
string g=new Guid(stringValue);
将是一种方法)。如果您可以添加用于在Guid中循环并将列表分配为字符串的结构,则可能会出现这种情况。是否要从列表中的所有Guid中生成一个字符串?在这种情况下,您可以使用