簡體   English   中英

c#使用StringReader將字符串解析為xml

[英]c# parse string to xml using StringReader

我有一個XML並將其加載到一個class

這是我的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> 

我已經定義了我的班級。

  [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; } } 

我這樣讀。

  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)); } 

result的價值是這個。

<BGBAResultadoOperacion><Severidad>OK</Severidad></BGBAResultadoOperacion><permiteOperar>true</permiteOperar><Lista><Codigo>ODM-006</Codigo><Descripcion>Aviso</Descripcion><DescripcionTecnica>xxxx</DescripcionTecnica></Lista>

我需要獲取BGBAResultadoOperacion的值

當我設定

using (StringReader reader = new StringReader(result))
     {
     result = (BGBAResultadoOperacion)(serializer.Deserialize(reader));
     }

結果得到XML錯誤...

There are multiple root elements. Line 1, position 76.

XML節點out_ policySystem內部具有三個根元素。 我只需要解析BGBAResultadoOperacion

我怎么才能得到它?

謝謝

因為這行:

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並在內存中反序列化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM