c# 如何从简单的 XML 模式中获取 XML 标签值
c# how to get XML tag values from a simple XML schema
我有一个 XML 是从其他应用程序那里得到的,它的结构是这样的:
<uid>1DE23B0B-1601-4E48-B8F5-7D3152A815A1</uid>
<status>1</status>
有没有办法使用 XMLDocument
在没有 的情况下如何获取值 ,实际上我什至不知道 XMLDocument
是否可以加载 XML 使用这些简单的架构。
有线索吗?
您可以像这样通过正则表达式解析您的伪xml:
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;
}
}
由于您的 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 是从其他应用程序那里得到的,它的结构是这样的:
<uid>1DE23B0B-1601-4E48-B8F5-7D3152A815A1</uid>
<status>1</status>
有没有办法使用 XMLDocument
在没有 的情况下如何获取值 ,实际上我什至不知道 XMLDocument
是否可以加载 XML 使用这些简单的架构。
有线索吗?
您可以像这样通过正则表达式解析您的伪xml:
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;
}
}
由于您的 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;
}
}