我正在使用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
答案 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