首先道歉我从未使用.NET中的XML构造进行编码,所以我希望这个问题有道理。
首先让我来定义我的XML:
<Msg>
<Routing>
...
...
...
</Routing>
<PayLoad>
<Information>
<elem1>...</elem1>
<elem2>...</elem2>
..
..
</Information>
<History>
<hist1>...</hist1>
<hist2>...</hist2>
</History>
</PayLoad>
</Msg>
我将整个XML作为String获取。
我现在需要调用另一个以自定义类作为参数的函数。自定义类有2个属性:1是另一个包含路由信息的自定义类,另一个是System.Xml.XmlElement类型。签名是这样的:
public class Message
Public header as HeaderInfo
Public payload as System.Xml.XmlElement
End Class
本质上,我需要将<PayLoad>
标记内的所有内容转换为System.Xml.XmlElement类型,在PayLoad下维护XML结构(我能够生成HeaderInfo类)
XML架构是固定的,它将始终具有相同的元素。
关于如何做到这一点的任何想法? 我在.NET 3.5上使用VB.NET
由于
答案 0 :(得分:1)
Dim xMsg as XElement = XElement.Parse("<Msg><Routing>...</Routing><PayLoad><Information><elem1>...</elem1></Information><History><hist1>...</hist1></History></PayLoad></Msg>")
Dim xPayLoad as XElement = xMsg...<PayLoad> 'Get PayLoad descendants (with sneaky VB syntax)
如果您可以将Message.payload
从XmlElement
更改为XElement
,则可以在此处完成。如果不是,你必须转换它:
Dim xmlDoc = new XmlDocument()
xmlDoc.Load(xPayLoad.CreateReader())
Message.payload = xmlDoc.DocumentElement
答案 1 :(得分:1)
您可以使用XmlDocument
将<Payload>
元素设为XmlElement
而不进行重新分析,例如:
Dim doc As New XmlDocument()
doc.LoadXml("Your XML string goes here")
Dim payload As XmlElement = DirectCast(doc.SelectSingleNode("//Payload"), XmlElement)
答案 2 :(得分:0)
对消息的小改动
Public Class Message
Public header As HeaderInfo
Public payload As XElement
End Class
然后是一些将字符串转换为XML的代码。
Dim s As String = "<Msg> <Routing></Routing> <PayLoad> <Information> <elem1>...</elem1> <elem2>...</elem2> </Information> <History> <hist1>...</hist1> <hist2>...</hist2> </History> </PayLoad></Msg>"
Dim someMessage As New Message
someMessage.payload = XElement.Parse(s)
一个问题,为什么XML首先是一个字符串?