从XML字符串到XSLT到c#类对象

本文关键字:对象 XSLT 字符串 XML | 更新日期: 2023-09-27 18:07:59

我在XSLT转换方面没有太多经验,所以我想我可以在这里得到一些帮助。

我在我的。net程序中通过MSMQ接收这个大xml字符串。让我们的例子如下:

<ROOT>
<PO>
  <PONUM> A101 </PONUM>
  <DESCRIPTION> THis is sample  PO </DESCRIPTION>
  <ADDRESS> Addresss here </ADDRESS>
  <ExtraInfo1> Any Info </ExtraInfo1>
  <ExtraInfo2> Any Info </ExtraInfo2>
<POLINE> 
  <POLINENUM> Line1 </POLINENUM>
  <NAME> Line 1 </NAME>
  <DATE> 2009-01-01 </DATE>
 <ExtraCol1> Col1 </ExtraCol1>
 <ExtraCol2> Col1 </ExtraCol2>
 <ExtraCol3> Col1 </ExtraCol3>
 <ExtraCol4> Col1 </ExtraCol4>
</POLINE>
<POLINE> 
  <POLINENUM> Line2 </POLINENUM>
  <NAME> Line 2 </NAME>
  <DATE> 2011-11-21 </DATE>
 <ExtraCol1> Col1 </ExtraCol1>
 <ExtraCol2> Col1 </ExtraCol2>
 <ExtraCol3> Col1 </ExtraCol3>
 <ExtraCol4> Col1 </ExtraCol4>
</POLINE>
<POLINE> 
  <POLINENUM> Line3 </POLINENUM>
  <NAME> Line 3 </NAME>
  <DATE> 2012-01-07 </DATE>
 <ExtraCol1> Col1 </ExtraCol1>
 <ExtraCol2> Col1 </ExtraCol2>
 <ExtraCol3> Col1 </ExtraCol3>
 <ExtraCol4> Col1 </ExtraCol4>
</POLINE>

</PO>
</ROOT>

现在我需要xslt转换来获得一些选定的字段,并最终在。net类对象中获得结果以进行进一步处理:

c#类如下:

public class PO
{
    public string PONUM { get; set; }
    public string PODESCRIPTION { get; set; }
    public List<POLINES> POLines { get; set; }
}
public class POLINES
{
    public string POLINENUM { get; set; }
    public string LINEDESCRIPTION { get; set; }
}

最后在我需要的PO类对象中Ponum = " a101 "PODESCRIPTION= "这是样品PO"

然后三个POLINES在public List POLines {get;设置;}

欢呼

从XML字符串到XSLT到c#类对象

不需要XSLT。XmlSerializer使用。它简单而简短。

PO po;
var xs = new XmlSerializer(typeof(PO));
using (var stringReader = new StringReader(xml))
using (var xmlReader = XmlReader.Create(stringReader))
{
    xmlReader.ReadToFollowing("PO");
    po = (PO)xs.Deserialize(xmlReader);
}

你的类应该看起来像:

public class PO
{
    public string PONUM { get; set; }
    [XmlElement("DESCRIPTION")]
    public string PODESCRIPTION { get; set; }
    [XmlElement("POLINE")]
    public List<POLINES> POLines { get; set; }
}
public class POLINES
{
    public string POLINENUM { get; set; }
    [XmlElement("NAME")]
    public string LINEDESCRIPTION { get; set; }
}

哪个xml节点必须符合linesesption属性?我在属性中写了NAME