2016-09-07 3 views
0

У меня есть простой XML, который выглядит следующим образом:Получить значение узла, когда вы передаете другое значение узла

<RealTimeLetter> 
    <Customer> 
    <RTLtr_Bank>620</RTLtr_Bank> 
    <RTLtr_Branch>214</RTLtr_Branch> 
    <RTLtr_Loancust>0423436</RTLtr_Loancust> 
    <RTLtr_NBR>1001</RTLtr_NBR> 
    <RTLtr_LetterNumber>30092</RTLtr_LetterNumber> 
    <RTLtr_CustomerAddress1>1234 qwtewret</RTLtr_CustomerAddress1> 
    <RTLtr_CustomerAddress2 /> 
    <RTLtr_CustomerCity>WGEWHG</RTLtr_CustomerCity> 
    <RTLtr_CustomerState>CO</RTLtr_CustomerState> 
    <RTLtr_CustomerZip>12345</RTLtr_CustomerZip> 
    <RTLtr_CoBorrowerName>PYTH SBUH</RTLtr_CoBorrowerName> 
    <RTLtr_CustomerName>Alternate1</RTLtr_CustomerName> 
    <RTLtr_CustomerSSN>888888888</RTLtr_CustomerSSN> 
    </Customer> 
    <Customer> 
    <RTLtr_Bank>620</RTLtr_Bank> 
    <RTLtr_Branch>214</RTLtr_Branch> 
    <RTLtr_Loancust>0423437</RTLtr_Loancust> 
    <RTLtr_NBR>1001</RTLtr_NBR> 
    <RTLtr_LetterNumber>30092</RTLtr_LetterNumber> 
    <RTLtr_CustomerAddress1>1234 qwtewret</RTLtr_CustomerAddress1> 
    <RTLtr_CustomerAddress2 /> 
    <RTLtr_CustomerCity>WGEWHG</RTLtr_CustomerCity> 
    <RTLtr_CustomerState>CO</RTLtr_CustomerState> 
    <RTLtr_CustomerZip>12345</RTLtr_CustomerZip> 
    <RTLtr_CoBorrowerName>PYTH SBUH</RTLtr_CoBorrowerName> 
    <RTLtr_CustomerName>Alternate2</RTLtr_CustomerName> 
    <RTLtr_CustomerSSN>888888888</RTLtr_CustomerSSN> 
    </Customer> 
</RealTimeLetter> 

Я пытаюсь получить значение <RTLtr_CustomerName> тега, когда я даю значение <RTLtr_Loancust> тег.

Сценарий, который у меня есть, возвращает Null для имени клиента.

Dim oFS 
Dim sFSpec 
Dim objMSXML 
Set oFS  = CreateObject("Scripting.FileSystemObject") 
sFSpec  = oFS.GetAbsolutePathName("C:\Users\ecz560\Documents\CorrespondenceDocs\VBScript\SampleXMLFile.xml") 
Set objMSXML = CreateObject("Msxml2.DOMDocument") 
objMSXML.setProperty "SelectionLanguage", "XPath" 
objMSXML.async = False 
objMSXML.load sFSpec 

If 0 = objMSXML.parseError Then 
    Dim sXPath : sXPath = "RealTimeLetter/Customer[RTLtr_Loancust=""0423436""]" 
    Dim ndlX : Set ndlX = objMSXML.selectNodes(sXPath) 
    If 0 = ndlX.Length Then 
     WScript.Echo sXPath, "failed" 
    Else 
     Dim ndX 
     For Each ndX In ndlX 
      WScript.Echo "CustomerName:", ndX.parentNode.GetAttribute("RTLtr_CustomerName") 
     Next 
    End If 
Else 
    WScript.Echo objMSXML.parseError.reason 
End If 

ответ

1

Ваш запрос

"RealTimeLetter/Customer[RTLtr_Loancust=""0423436""]" 

возвращает Клиенту с конкретным Loancust/номером. Вы заинтересованы в RTLtr_CustomerName - узле, а не атрибуте. Таким образом, запрос для

"RealTimeLetter/Customer[RTLtr_Loancust=""0423436""]/RTLtr_CustomerName" 

и работать с возвращенным единственным узлом. В коде:

... 
    Dim sXPath : sXPath = "RealTimeLetter/Customer[RTLtr_Loancust=""0423436""]/RTLtr_CustomerName" 
    Dim ndX : Set ndX = objMSXML.selectSingleNode(sXPath) 
    If ndX Is Nothing Then 
     WScript.Echo sXPath, "failed" 
    Else 
     WScript.Echo "CustomerName:", ndX.text 
    End If 
... 

выход:

cscript 39375295.vbs 
CustomerName: Alternate1 
Смежные вопросы