c#如何从简单的XML模式中获取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) {
<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)