解析 XML 的更简单方法
Simpler way to parse XML
我有以下 xml 从 api 返回:
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>
<errorcode>1002</errorcode>
<errortext>there is already an open session</errortext>
</error>
</response>
我想阅读错误代码。我编写了以下代码:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(result1);
XmlNode node = xmlDoc.DocumentElement.SelectSingleNode("/response").ChildNodes[0].ChildNodes[0].InnerText
是否有任何其他方法可以通过使用 linq 或其他技术来做到这一点?
我正在使用 api 调用如下
HttpClientHandler handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler);
var result = client.GetAsync(new Uri("https://api/access.mth?username=xyz&password=xyz@2021)).GetAwaiter().GetResult();
StreamReader reader = new StreamReader(result.Content.ReadAsStringAsync().Result);
您可以使用位于命名空间 System.Xml.Serialization 中的 XML 序列化程序。根据您的 XML 元素,使用具有带有 getter 和 setter 的 public 属性的无参数构造函数创建 class:
public class response
{
public error error {get;set;}
}
public class error
{
public int errorcode {get;set;}
public string errortext {get;set;}
}
注意:无参数构造函数是编译器在这里隐式创建的,因为根本没有定义构造函数。
您可以通过
加载文件
using StreamReader reader = new StreamReader("file.xml");
XmlSerializer serializer = new XmlSerializer(typeof(response));
var result = (response)serializer.Deserialize(reader);
int errorCode = result.error.errorcode;
您对 XML 文件的格式有一定的灵活性。例如,如果您还有此文件要解析:
<response>
<returncode>
<code>100</code>
<description>successful</description>
</returncode> <authkey>xxxx<authkey>
</response>
您可以修改您的 class 结构:
public class response
{
public error error {get;set;}
public returncode returncode {get;set;}
public string authkey {get;set;}
}
public class error
{
public int errorcode {get;set;}
public string errortext {get;set;}
}
public class returncode
{
public int code {get;set;}
public string description {get;set;}
}
如果解析第一种格式的文件,returncode
和authkey
将为空。如果您解析第二种格式的文件,error
将为空。
我有以下 xml 从 api 返回:
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>
<errorcode>1002</errorcode>
<errortext>there is already an open session</errortext>
</error>
</response>
我想阅读错误代码。我编写了以下代码:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(result1);
XmlNode node = xmlDoc.DocumentElement.SelectSingleNode("/response").ChildNodes[0].ChildNodes[0].InnerText
是否有任何其他方法可以通过使用 linq 或其他技术来做到这一点?
我正在使用 api 调用如下
HttpClientHandler handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler);
var result = client.GetAsync(new Uri("https://api/access.mth?username=xyz&password=xyz@2021)).GetAwaiter().GetResult();
StreamReader reader = new StreamReader(result.Content.ReadAsStringAsync().Result);
您可以使用位于命名空间 System.Xml.Serialization 中的 XML 序列化程序。根据您的 XML 元素,使用具有带有 getter 和 setter 的 public 属性的无参数构造函数创建 class:
public class response
{
public error error {get;set;}
}
public class error
{
public int errorcode {get;set;}
public string errortext {get;set;}
}
注意:无参数构造函数是编译器在这里隐式创建的,因为根本没有定义构造函数。
您可以通过
加载文件using StreamReader reader = new StreamReader("file.xml");
XmlSerializer serializer = new XmlSerializer(typeof(response));
var result = (response)serializer.Deserialize(reader);
int errorCode = result.error.errorcode;
您对 XML 文件的格式有一定的灵活性。例如,如果您还有此文件要解析:
<response>
<returncode>
<code>100</code>
<description>successful</description>
</returncode> <authkey>xxxx<authkey>
</response>
您可以修改您的 class 结构:
public class response
{
public error error {get;set;}
public returncode returncode {get;set;}
public string authkey {get;set;}
}
public class error
{
public int errorcode {get;set;}
public string errortext {get;set;}
}
public class returncode
{
public int code {get;set;}
public string description {get;set;}
}
如果解析第一种格式的文件,returncode
和authkey
将为空。如果您解析第二种格式的文件,error
将为空。