返回的xPath值粘在一起

时间:2015-05-18 19:47:24

标签: xml vb.net xpath

我正在使用stringbuilder创建表达式,当它返回值时,如果一个子节点有多个子节点,它们会返回卡在一起。我希望他们分开归来。我的代码出了什么问题?

Dim xDoc As New XmlDocument
Dim bldr As New StringBuilder
Dim crit As String
Dim val As String

bldr.Append("//View[@Name='")
bldr.Append(TextBox2.Text)
bldr.Append("']")
crit = bldr.ToString
xDoc.Load("d:\input.sample.xml")
val = xDoc.SelectSingleNode(crit).InnerText
TextBox3.Text = val

所以在我的xml中有这样的结构:

<?xml version="1.0" encoding="utf-8"?>
<Views ClientCode="Example">
    <View Name="vSample">
        <Criteria>SAMPLE1</Criteria>
        <Criteria>SAMPLE2</Criteria>
        <Criteria>SAMPLE3</Criteria>
        <Criteria>SAMPLE4</Criteria>
    </View>
</Views>

我回来了:

SAMPLE1SAMPLE2SAMPLE3SAMPLE4

我想要的是:

SAMPLE1
SAMPLE2
SAMPLE3
SAMPLE4

2 个答案:

答案 0 :(得分:2)

有很多方法可以执行此操作,但是您可以循环遍历子节点并使用回车符添加每个节点的innertext:

For Each item As XmlNode In xDoc.SelectSingleNode(crit).ChildNodes

    val += item.InnerText & vbCrLf

Next

TextBox3.Text = val

只需使用val = xDoc.SelectSingleNode(crit).InnerText,即可将所有子节点的innerText作为一个大字符串,并且不会添加换行符(如您所见)。

我也非常确定曾经使用过这个产品的人会有一个单行代码。

答案 1 :(得分:0)

更改为使用val = xDoc.SelectSingleNode(crit).InnerXml,您应该清楚选择父元素“View”

而你可以这样做:

        Dim nodeList = xDoc.SelectNodes(crit + "/Criteria")

        For Each criteria As XmlNode In nodeList
            TextBox3.Text = TextBox3.Text + val + Constants.vbCrLf
        Next