从部分XML创建XMLElement

时间:2016-04-25 10:03:25

标签: xml vb.net

首先道歉我从未使用.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

由于

3 个答案:

答案 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.payloadXmlElement更改为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首先是一个字符串?