使用XElement

时间:2018-08-07 10:23:27

标签: xml vb.net xelement

对于使用VB.NET解析XML来说,我还很陌生。我有一些这种格式的XML(简化视图)

<Range> 
<from>1</from> 
<to>5</to> 
</Range> 

<Range> 
<from>10</from> 
<to>20</to>
</Range>

<Range> 
<from>100</from> 
<to>200</to>
</Range>

可以有任意数量的<Range>标签,但是每个Range标签下面总会有一个<from><to>标签。

我需要产生的是一个字符串,使用上面的示例,它将看起来像这样

1:1-5;2:10-20;3:100-200

我正在尝试使用XElement对此进行解析,但是不确定如何进行。我尝试使用.Descendants("Range")进行迭代,该迭代确实为我提供了数字,但我无法分离出from和to。

任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:1)

根据数据选择所有范围和格式。在下面的示例中,我使用了System.Text.StringBuilder。

    'your test data
    smpl = <root>
               <Range>
                   <from>1</from>
                   <to>5</to>
               </Range>
               <Range>
                   <from>10</from>
                   <to>20</to>
               </Range>
               <Range>
                   <from>100</from>
                   <to>200</to>
               </Range>
           </root>

    Dim sb As New System.Text.StringBuilder
    Dim ct As Integer = 1
    For Each r As XElement In smpl...<Range>
        sb.AppendFormat("{0}:{1}-{2};", ct, r.<from>.Value, r.<to>.Value)
        ct += 1
    Next
    sb.Remove(sb.Length - 1, 1)

    Dim s As String = sb.ToString

运行s =

之后
 1:1-5;2:10-20;3:100-200

答案 1 :(得分:0)

好吧,认为我有一个方法,尽管它不干净!

我创建2个枚举器,一个用于Descendants("from"),另一个用于Descentants("to") 然后,在一个循环中,我可以轻松地构造我的字符串

类似的事情(键入内存,语法可能不完整,txt是整个XML的XElement对象)

Dim p as IEnumerable(of Xelement) = txt.Descendants("from")
Dim q as IEnumerable(of Xelement) = txt.Descendants("to")
Dim i as Integer = 0

While i < p.Count
String.Format("{0}:{1}-{2}", i.ToString,p(i),q(i))
End While