c# - c# parse string to xml using StringReader
问题描述
I have an XML
and I load it in an class
.
This is my XML
<out_policySystem xmlns:msl="http://www.ibm.com/xmlmap" xmlns:io="" xmlns:xs4xs="http://www.w3.org/2001/XMLSchema">
<BGBAResultadoOperacion>
<Severidad>OK</Severidad>
</BGBAResultadoOperacion>
<permiteOperar>true</permiteOperar>
<Lista xmlns:ns0=\"http://CalypsoPolicySystem_lib/service\">
<Codigo>ODM-006</Codigo>
<Descripcion>Aviso</Descripcion>
<DescripcionTecnica>XXXX</DescripcionTecnica>
</Lista>
</out_policySystem>
I have define my classes like this.
[XmlRoot(ElementName = "out_policySystem")]
public partial class output_policySystem
{
public BGBAResultadoOperacion BGBAResultadoOperacion { get; set; }
public bool permiteOperar { get; set; }
public List[] Lista { get; set; }
}
public partial class BGBAResultadoOperacion
{
public string Severidad { get; set; }
}
public partial class List
{
public string Codigo { get; set; }
public string Descripcion { get; set; }
public string DescripcionTecnica { get; set; }
}
I read this like this.
XmlNodeList elemlist = xDoc.GetElementsByTagName("out_policySystem");
string result = elemlist[0].InnerXml;
XmlSerializer serializer = new XmlSerializer(typeof(BGBAResultadoOperacion));
using (StringReader reader = new StringReader(result))
{
result = (BGBAResultadoOperacion)(serializer.Deserialize(reader));
}
the value of result
is this.
<BGBAResultadoOperacion><Severidad>OK</Severidad></BGBAResultadoOperacion><permiteOperar>true</permiteOperar><Lista><Codigo>ODM-006</Codigo><Descripcion>Aviso</Descripcion><DescripcionTecnica>xxxx</DescripcionTecnica></Lista>
What I need is to get the value of BGBAResultadoOperacion
when i set
using (StringReader reader = new StringReader(result))
{
result = (BGBAResultadoOperacion)(serializer.Deserialize(reader));
}
result get XML error...
There are multiple root elements. Line 1, position 76.
XML node out_policySystem
has three root elements inside it. I need to parse only BGBAResultadoOperacion
How can I get it?
Thanks
解决方案
那是因为这条线:
elemlist[0].InnerXml
它返回一个 XML 片段,而不是一个 XML 文档。
<BGBAResultadoOperacion>
<Severidad>OK</Severidad>
</BGBAResultadoOperacion>
<permiteOperar>true</permiteOperar>
<Lista xmlns:ns0=\"http://CalypsoPolicySystem_lib/service\">
<Codigo>ODM-006</Codigo>
<Descripcion>Aviso</Descripcion>
<DescripcionTecnica>XXXX</DescripcionTecnica>
</Lista>
因此,要么使用 .OuterXML,要么使用 XElement.CreateReader(),如此处答案中所述:将对象序列化为 XElement 并在内存中反序列化它
推荐阅读
- zsh - zsh 别名在执行时删除第一个字符
- python - 需要帮助计算神经网络反向传播中的增量项
- python - 如何将 `lambda: pass` 作为关键字参数传递?
- android - 如何在 Kotlin 测试中的 TextView 中断言多行文本
- r - 样式分组类别
- nestjs - 如何使用不同的配置多次初始化nestjs模块?
- svg - 我不明白 svglib 中的缩放比例
- c# - 如何获取 ServiceBusClient 的连接字符串?
- conv-neural-network - 为什么 Netron 将 BatchNorm2d 层渲染为我模型的偏差?
- javascript - 使用任何库的 CDN 是否比在我们的本地系统或服务器中下载更合适?