Есть ли простой способ разбить текст в VB.NET?

Есть ли простой способ разбить текст в VB.NET? (используя начальную и конечную строки, чтобы понять, что находится между ними?)

Я делаю это все время в JScript со следующим:

<junk>
<blah>
<data>someData1</data>
<data>someData2</data>
<data>someData3</data>
</blah>
</junk>
var data = string.split('<data>')[1].split('</data>')[0];

дал бы мне "someData1", изменив индекс [1] на [2], дал бы мне "someData2" очень легко

по какой-то причине это кажется очень сложным для VB.NET.

Вот кусок фактического HTML, с которым я имею дело:

<...malformed html>
<div style='font-size:10pt;font-family:Times;color:#000000;position:absolute;top:2731.068;left:48'>Total</div>
<div style='font-size:10pt;font-family:Times;color:#000000;position:absolute;top:2731.068;left:346.2141'>18,072.59</div>
<div style='font-size:10pt;font-family:Times;color:#000000;position:absolute;top:2731.068;left:444.3433'>100.00%</div>
<div style='font-size:10pt;font-family:Times;color:#000000;position:absolute;top:2731.068;left:567.1293'>21,687.11</div>
<div style='font-size:10pt;font-family:Times;color:#000000;position:absolute;top:2731.068;left:666.3433'>100.00%</div>
<malformed html...>

Мне нужно найти индекс ‹div>Total‹/div>, а затем захватить данные между 1-м и 3-м div после этого.


person bfritz    schedule 30.06.2011    source источник
comment
ты про струны?   -  person asma    schedule 30.06.2011
comment
Похоже, вы разбираете XML. Если это так, то почему бы не использовать XML-библиотеки, которые обработают сотни пограничных случаев, с которыми не справится ручной анализ строк.   -  person Damien_The_Unbeliever    schedule 30.06.2011
comment
На самом деле это строка с кучей HTML, с которой я имею дело.   -  person bfritz    schedule 30.06.2011


Ответы (2)


Dim e = XElement.Parse(str)
Dim a = e.XPathSelectElements("./blah").Elements().ToArray()

a(0).Value 'someData1
a(1).Value 'someData2

РЕДАКТИРОВАТЬ: для синтаксического анализа html попробуйте использовать Html Agility Pack.

person Magnus    schedule 30.06.2011
comment
Это было бы прекрасно, если бы это были XML-данные. Я попробовал вышеописанное, и мой выходной HTML-код исходит от части программного обеспечения под названием Xactimate, и он не делает XHTLM-дружественный код, поэтому я получаю много ошибок, таких как System.Xml.XmlException: '0' - это неожиданный токен. Ожидаемый токен '' или '''. - person bfritz; 30.06.2011
comment
Для указанного вами фрагмента вы можете использовать приведенный выше код, просто добавив узел вокруг элемента div. - person Magnus; 30.06.2011
comment
Теперь я перехожу на этот подход, пытаясь извлечь этот кусок хорошего html, чтобы я мог использовать XPath... - person bfritz; 30.06.2011

У меня это работает, хотя это один из худших кодов, которые я когда-либо писал...

Dim sr As StreamReader

sr = New StreamReader("C:\test.html")

Dim xactHTML As String = sr.ReadToEnd

Dim left As Integer = xactHTML.IndexOf("Total</div>")
Dim chunk1 As String = xactHTML.Substring(left + 12)

Dim right As Integer = chunk1.IndexOf("<div style='position")
Dim chunk2 As String = chunk1.Substring(0, right - 1)

Dim xHTML As String = "<xml>" & chunk2 & "</xml>"

Dim e = XElement.Parse(xHTML)
Dim a = e.Elements().ToArray()

Dim damageAmmount As String = a(2).Value()
person bfritz    schedule 30.06.2011