2013-12-05 6 views
0

Я пытаюсь запросить XML-файл, чтобы получить значения атрибутов для определенного элемента.Как запросить XML по индексу атрибута с помощью XMLDom

Это прекрасно работает, когда элемент имеет уникальный набор атрибутов, например.

<parent> 
<child code="REWC" curr="PLN" amt="1000"/> 
</parent> 

Для того, чтобы запросить выше я использую:

  • объект = Microsoft.XMLDOM
  • getElementsByTagName или метод SelectSingleNode
  • После того, как у меня, что я бегу метода, 'GetAttribute', который дает мне то, что мне нужно

код фрагмента:

Set ElementValue = m_objXmlDom.selectSingleNode("//Txn[" & p_intIndex & "]/" & p_strElementName & " ") 

'set attribute value 
strAttributeValue = ElementValue.getAttribute(p_strAttributeName) 

Однако, я сейчас в такой ситуации, когда XML выглядит согласно ниже:

<parent> 
<child code="REWC" curr="PLN" amt="1000"/> 
<child code="xxxx" curr="EUR" amt="1500"/> 
<child code="yyyy" curr="GBP" amt="1700"/> 
</parent> 

есть простой способ перебора каждого атрибута, получить значение, и тогда я могу сделать что-то с этим. Я ищу что-то вроде:

.getAttribute(code)[0] 
.getAttribute(code)[1] 
.getAttribute(code)[2] 

Нечто вроде выше распечатает все значения для всех атрибутов. Но я не уверен, как индексироваться на уровне атрибута.

Любая помощь будет отличной. Я использую VBScript с Microsoft XMLDom.

ответ

0

Хорошо, теперь я обошел проблему, выполнив цикл for, чтобы перебрать поверх всех возвращаемых элементов и затем прочитать в каждом атрибуте. Если атрибут соответствует тому, который я ищу, я выхожу из цикла for.

Если есть лучший способ сделать это, то, пожалуйста, поделитесь любыми ответами, тем временем мой код работает, как показано ниже.

Фрагмент кода:

Set Data = m_objXmlDom.getElementsByTagName(".//Txn[" & p_intIndex & "]/" & p_strElementName & "/" & p_strSubElementName & "") 

'loop through each one 
For Each DataItem in Data 
    strTemp1 = DataItem.getAttribute("code") 
    strTemp2 = DataItem.getAttribute("curr") 
    strTemp3 = DataItem.getAttribute("amt") 

    If strTemp1 = strExpectedValue Then 
     'set the values 
     m_strTemp1 = strTemp1 
     m_strTemp2 = strTemp2 
     m_strTemp3 = strTemp3 
     'set pass flag 
     blnDataFound = True 
     Exit For 
    End If 
Next