Проверка узла с апострофом в значении

У меня есть набор кода, который ищет человека определенного роста, который пользователь выбирает в поле со списком, после чего удаляет все предметы, которые не совпадают в списке. Значения для поля со списком такие: 5'0-5'5. Моя проблема в том, что апострофы в 5'0-5'5 вызывают ошибки. Вот мой код

If ComboBox5.Value <> "" Then
    i = 0  

    Do While i <= ListBox26.ListCount - 1
        Set CheckHeight = objDom.SelectSingleNode("//IDNum/LastName[@LName = '" _
            & LastName.Text & "']/FirstName[@FName='" & FirstName.Text _
            & "']/DateOfBirth[@DOB='" & Dob.Text & "']/Height[.='" _
            & ComboBox5.Value & "']")

        If CheckHeight Is Nothing Then
            ListBox26.RemoveItem (i)
        Else
            i = i + 1
        End If
    Loop

XML выглядит следующим образом:

<LastName LName="Rodriguez Jesus Luis">
  <FirstName FName="Armondo">
    <DateOfBirth DOB="7/10/1975">
       <Hair>Black</Hair> 
       <Eyes>Brown</Eyes> 
       <Weight>150 - 175 lbs</Weight> 
       <Height>5'6 - 5'9</Height> 
    </DateOfBirth>
  </FirstName>
</LastName>

Я пробовал заменить один апостроф "'" двумя "''", пробовал Chr(39), пробовал &apos;, но все равно ошибки.

Я могу заставить его работать, если использую getElementsByTagName и напишу еще кучу кода для сравнения и удаления, но я решил использовать приведенный выше код, поскольку он работает со всеми остальными полями, которые я использую.

Ошибка, которую я получаю:

Ожидаемый токен ']' найден 'NUMBER'.

//Идентификатор/Фамилия[@LName = 'Rodriguez Jesus Luis']/Имя[@FName='Armondo']/ДатаРождения[@DOB='7/10/1975']/Рост[.='5'--> 0‹-- - 5'3']


person user770344    schedule 12.05.2015    source источник
comment
Какую ошибку вы получаете?   -  person John Saunders    schedule 13.05.2015
comment
Обновлено с ошибкой выше   -  person user770344    schedule 13.05.2015


Ответы (1)


Используйте двойные кавычки вокруг строки, которая может содержать одинарные кавычки. В VBScript вложенные двойные кавычки в строках экранируются путем их удвоения:

Set CheckHeight = objDom.SelectSingleNode("//IDNum/LastName[@LName = '" & _
  LastName.Text & "']/FirstName[@FName='" & FirstName.Text & _
  "']/DateOfBirth[@DOB='" & Dob.Text & _
  "']/Height[.=""" & ComboBox5.Value & """]")
               ^^                       ^^

В качестве примечания, ваш формат данных серьезно испорчен. Вся ваша иерархия должна скорее быть атрибутами одного и того же узла:

<Person LastName="Rodriguez Jesus Luis"
    FirstName="Armondo"
    DateOfBirth="7/10/1975"
    Hair="Black"
    Eyes="Brown"
    Weight="150 - 175 lbs"
    Height="5'6 - 5'9"
/>
person Ansgar Wiechers    schedule 12.05.2015
comment
Это сработало! Я подумал, что мне нужны двойные кавычки, но подумал, что мне все еще нужно включить апостроф для имени значения узла. Причина, по которой формат такой, заключается в том, что программа делает другие вещи, которые требуют этого. Поверь мне, я предпочел бы, чтобы было по-другому. - person user770344; 13.05.2015