我在VB.NET中使用Split函数,当我显示输出时它产生一个奇怪的结果。
我有一个XML文档,我只想循环遍历文档中的每个<backup>
标记,因此我正在使用:
Dim XMLString As String
XMLString = "<backup>INFO</backup><backup>ANOTHER INFO</backup>"
Dim SplitBackup As String()
SplitBackup = XMLString.Split("<backup>")
For Each BackupContent In SplitBackup
MsgBox(BackupContent)
Next
现在,人们会期望这会在MsgBox中输出INFO,我点击确定,然后另一个会弹出并显示'另一个信息',但似乎Split功能被填满了'&lt;'和'&gt;'在里面。有道路我可以通过逃避它或以其他方式解析它来解决这个问题。
非常感谢任何建议!
答案 0 :(得分:1)
给XML一个机会。
Dim bups As XElement = <backups><backup>INFO</backup><backup>ANOTHER INFO</backup></backups>
For Each xe As XElement In bups.Elements
Debug.WriteLine(xe.Value)
Next
答案 1 :(得分:0)
你需要摆脱关闭元素。
所以你可以使用:
Dim XMLString As String
XMLString = "<backup>INFO</backup><backup>ANOTHER INFO</backup>"
Dim SplitBackup As String()
SplitBackup = XMLString.Split("<backup>")
For Each BackupContent In SplitBackup
Dim Something() as string
Something = BackupContent.Split("</backup">)
MsgBox(Something(0))
Next
虽然不是最优雅的编码。
答案 2 :(得分:0)
执行此操作的一种可能性是使用regular expression拆分标记(并转义有问题的符号),然后使用LINQ to Objects从每个标记中获取值:
Dim XMLString As String = "<backup>INFO</backup><backup>ANOTHER INFO</backup>"
Dim words = Regex.Split(XmlString, "\<backup\>").Where(function(f) not String.IsNullOrEmpty(f)).Select(function(f) f.Replace("</backup>", String.Empty)) '
for each word in words
Console.WriteLine(word)
next word
输出结果为:
INFO
ANOTHER INFO
代码的作用:
Dim words = Regex
' split on every tag
.Split(XmlString, "\<backup\>")
' remove empty items
.Where(function(f) not String.IsNullOrEmpty(f))
' remove trailing closing tag and thus retrieve the value within
.Select(function(f) f.Replace("</backup>", String.Empty))
正如已经建议的那样,您最好学习如何使用内置XML支持 - 它更容易,更安全,因为您无需关注括号 - <
和>
会自动处理。可能的解决方案可能如下所示(!您需要有一个有效的XML结构 - 一个唯一的根节点!):
' !!! you need to have a valid XML element - one root node !!!
Dim XMLString As String = "<root><backup>INFO</backup><backup>ANOTHER INFO</backup></root>"
dim words = XDocument.Parse(XMLString).Root.Descendants("backup").Select(function (f) f.Value)
for each word in words
Console.WriteLine(word)
next word
输出与上述相同。代码如何工作:
dim words = XDocument
' parse the specified XML structure; use Load("file.xml") to load from file
.Parse(XMLString)
' from the root node
.Root
' take all nodes matching the specified tag
' note - no need to pay attention to the < and >
.Descendants("backup")
' select the value of the XML node
.Select(function (f) f.Value)