c#如何从简单的XML模式中获取XML标记值

c#如何从简单的XML模式中获取XML标记值,c#,xmldocument,C#,Xmldocument,我有一个从其他应用程序获得的XML,其结构如下: <uid>1DE23B0B-1601-4E48-B8F5-7D3152A815A1</uid> <status>1</status> internal class Data { public string UId { get; set; } public string Status { get; set; } public Data(string text) {

我有一个从其他应用程序获得的XML,其结构如下:

<uid>1DE23B0B-1601-4E48-B8F5-7D3152A815A1</uid>
<status>1</status>
internal class Data
{
    public string UId { get; set; }
    public string Status { get; set; }

    public Data(string text)
    {
        string strRegex = @"<uid>(.*?)</uid>.*?<status>(.*?)</status>";
        Regex myRegex = new Regex(strRegex, RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

        var match = myRegex.Match(text);
        UId = match.Groups[1].Value;
        Status = match.Groups[2].Value;
    }
}
1DE23B0B-1601-4E48-B8F5-7D3152A815A1
1.
有没有一种方法可以在不使用
XMLDocument
的情况下获得值,实际上我甚至不知道
XMLDocument
是否可以用这些简单的模式加载XML


有什么线索吗?

您可以通过正则表达式解析伪xml,如下所示:

<uid>1DE23B0B-1601-4E48-B8F5-7D3152A815A1</uid>
<status>1</status>
internal class Data
{
    public string UId { get; set; }
    public string Status { get; set; }

    public Data(string text)
    {
        string strRegex = @"<uid>(.*?)</uid>.*?<status>(.*?)</status>";
        Regex myRegex = new Regex(strRegex, RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);

        var match = myRegex.Match(text);
        UId = match.Groups[1].Value;
        Status = match.Groups[2].Value;
    }
}
内部类数据
{
公共字符串UId{get;set;}
公共字符串状态{get;set;}
公共数据(字符串文本)
{
字符串stregex=@“(.*?).*(.*?)”;
Regex myRegex=new Regex(strRegex,RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
var match=myRegex.match(文本);
UId=match.Groups[1]。值;
状态=匹配。组[2]。值;
}
}

由于您的xml格式不正确(有多个根)-您无法将其加载到
XmlDocument
XDocument
-您将得到解析错误

但是,如果要在其设置中指定
ConformanceLevel.Fragment
,则可以使用
XMLTextReader
读取它:

var settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
var reader = XmlReader.Create(@"c:\temp\test.xml", settings);
while (reader.Read())
{
    if (reader.NodeType == XmlNodeType.Element)
    {
        var nodeName = reader.Name;
        reader.Read();
        var value = reader.Value;
    }
}

它不是有效的xml,我想这个xml有两个根节点,所以它是无效的。我认为您应该在不使用.Net的XMLAPI的情况下解析它(例如使用regex)