0

我在一个字符串变量上有一个很大的值,我想只保留其中的一部分,我不知道我的数据所在的字符串中的确切位置,因为它可能随时变化,但我知道它介于特定之间标签,那么我怎么能只保留这些标签内的内容呢?

我拥有的那种字符串的例子:

Dim var as String = "
<random>     <stuffIDontNeed>      <x>1</x>      <x>2</x>      <x>3</x>     
</stuffIDontNeed>     <stuffIDoNeed>      <x>a</x>      <x>b</x>      <x>c</x>   
</stuffIDoNeed>    </random> "

它都在同一个字符串中,我只是使用了多行,所以它完全显示而无需滚动。

所以我想做的是获取从 stuffIDoNeed 开始到结束的所有内容、标签和所有内容,而不仅仅是其中的值。

4

4 回答 4

1

使用String.IndexOf 方法方法。

Dim var as String = "<random>     <stuffIDontNeed>      <x>1</x>      <x>2</x>     <x>3</x>     </stuffIDontNeed>     <stuffIDoNeed>      <x>a</x>      <x>b</x>      <x>c</x>  </stuffIDoNeed>    </random> "

Dim Start As Integer = var.IndexOf("<stuffIDoNeed>")
Dim End As Integer = var.IndexOf("</stuffIDoNeed>") + 15

Dim var NewString = var.SubString(Start, End - Start)

抓取字符串中<stuffIDoNeed>开始的位置。

接下来,获取字符串中</stuffIDoNeed>开始的位置,然后将 15 添加到它以说明您要查找的文本的结尾。

最后,使用带有 Start 位置的 Substring 和 End - Start 来获取要提取的字符串的长度。

NewString将等于<stuffIDoNeed> <x>a</x> <x>b</x> <x>c</x> </stuffIDoNeed>

或者,如果您打算对提取的字符串中的值执行某些操作,则可以查看 LINQ to XML 并使用 XDocument 加载 XML 并将其解析出来。

于 2012-10-17T19:57:28.350 回答
1

这将从输入字符串中提取子字符串(请不要使用 var 作为变量名,这会造成混淆)

Dim inputData as String = " " & _
        "<random>     <stuffIDontNeed>      <x>1</x>      <x>2</x>      <x>3</x>      " & _
        "</stuffIDontNeed>     <stuffIDoNeed>      <x>a</x>      <x>b</x>      <x>c</x>   "  & _
        "</stuffIDoNeed>    </random> " 

Dim result as string = string.Empty
Dim startPos = inputData.IndexOf("<stuffIDoNeed>")
Dim endPos = inputData.IndexOf("</stuffIDoNeed>")
if startPos > 0 AndAlso endPos > 0 andAlso endPos > startPos then
    result = inputData.SubString(startPos, endPos + 15 - startPos)
end if

Console.WriteLine(result)
于 2012-10-17T20:00:59.563 回答
1

如果您要在 XML 文档中查找节点的值,最好使用 .NET 中内置的 XML 文档解析器之一,例如XmlDocumentXDocument. 例如,您可以这样做XmlDocument

Dim doc As New XmlDocument()
doc.LoadXml(var)
Dim stuffIDoNeed As String = doc.SelectSingleNode("/random/stuffIDoNeed").InnerXml
于 2012-10-17T21:47:30.550 回答
0

最好转换成 XML,如果你知道你的结构总是这样。否则使用正则表达式,如果它变得更复杂,你可以适应。它也比IndexOf方法更具可读性。例如:

Imports System.Text.RegularExpressions
.....
Dim var As String = "<random>     <stuffIDontNeed>      <x>1</x>      <x>2</x>      <x>3</x>     </stuffIDontNeed>     <stuffIDoNeed>      <x>a</x>      <x>b</x>      <x>c</x>   </stuffIDoNeed>    </random> "
Dim g As Match = Regex.Match(var, "<stuffIDoNeed>(?<stuffIDoNeed>.*)</stuffIDoNeed>")
MsgBox(g.Groups("stuffIDoNeed").Value)
于 2012-10-17T20:17:30.990 回答