2016-04-18 11 views
0

Ich habe eine XPath-Abfrage //*[local-name()='Home Query Data'], getestet here. Jetzt muss ich diesen XPath ausführen, um den gesamten Text innerhalb von <Home Query Data> --- </Home Query Data> Tag zurückzugeben.XML-DOM, um Text innerhalb eines Tags zu erhalten

Welchen DOM-Selektor sollte ich verwenden, um den gesamten Text innerhalb des Tags auszuwählen? Like: objMSXML.selectNodes(XPath)

bearbeiten

ich VBScript für meine Programmierung verwende. Mein Code ist unten:

Sub ReadXml(FileName) 
    Dim nodeinfo (4) 
    Dim sXPath 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set fileObj = fso.GetFile(FileName) 
    objMSXML.async = True 
    objMSXML.load FileName 

    If 0 = objMSXML.parseError Then 
    sXPath = "//*[local-name()='Home Query Data']" 
    End If 
    Dim querySubject : Set querySubject = objMSXML.selectSingleNode(sXPath) 
    If querySubject Is Nothing Then 
    MsgBox sXPath, "failed" ** Error type mismatch [string "failed"]** 
    Else 
    For Each node In objMSXML.selectNodes(sXPath) 
     MsgBox node 
    Next 
    End If 
End Sub 

ich es für einen anderen Posten kopiert habe und nicht in der Lage, herauszufinden, wie gesamten Text in XML-Tag zurückzukehren.

Ich habe ein Problem in diesem Abschnitt:

Dim querySubject : Set querySubject = objMSXML.selectSingleNode(sXPath) 
If querySubject Is Nothing Then 
    MsgBox sXPath, "failed" 
Else 
    For Each node In objMSXML.selectNodes(sXPath) 
    MsgBox node 
    Next 
End If 

EDIT2

Meine Arbeits XML ist wie:

<?xml version="1.0" encoding="UTF-8"?> 
<breakfast_menu> 
<food> 
    <name locale="en">Stage Query Data</name> 
    <price>$5.95</price> 
    <description>Our famous Belgian Waffles with plenty of real maple syrup</description> 
    <calories>650</calories> 
</food> 
<drink> 
    <name locale="en">Home Query Data</name> 
    <price>$4.50</price> 
    <description>Thick slices made from our homemade sourdough bread</description> 
    <calories>600</calories> 
</drink> 
<mix> 
    <name locale="en">Report Query Data</name> 
    <price>$6.95</price> 
    <description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description> 
    <calories>950</calories> 
</mix> 
</breakfast_menu> 

I Text innerhalb Tag erfassen müssen <drink>, dessen Name Home Query Data.

<name locale="en">Home Query Data</name> 
     <price>$4.50</price> 
     <description>Thick slices made from our homemade sourdough bread</description> 
     <calories>600</calories> 

Derzeit ich an MsgBox sXPath bin immer, "nicht bestanden" ** Fehler type mismatch [string "nicht bestanden"] **

+0

haben Sie versucht, 'node.text'? https://msdn.microsoft.com/en-us/library/ms763798.aspx –

+0

das Problem mit Xpath. es sagt Typ Mismatch sxpath .... –

+0

Zeigen Sie die vollständige Fehlermeldung. Zeigen Sie auch ein repräsentatives (funktionierendes) Beispiel Ihrer XML-Daten. –

Antwort

1

Sie die text() Attributselektor verwenden sollten, nicht die local-name() Funktion. Letzteres erhält den Namen eines Knotens, nicht seinen Inhalt.

Auch Ihr MsgBox Anruf ist ungültig - siehe https://msdn.microsoft.com/en-us/library/sfw6660x%28v=vs.84%29.aspx.

Die folgenden Arbeiten wie erwartet:

Sub ReadXML(FileName) 
    Dim sXPath 
    Set objMSXML = CreateObject("Msxml2.DOMDocument.6.0") 
    objMSXML.load FileName 

    If objMSXML.parseError = 0 Then 
    sXPath = "//*[name/text()='Home Query Data']" 
    Dim querySubject : Set querySubject = objMSXML.selectSingleNode(sXPath) 
    If querySubject Is Nothing Then 
     MsgBox sXPath, 0, "failed" 
    Else 
     For Each node In objMSXML.selectNodes(sXPath) 
     MsgBox node.text 
     Next 
    End If 
    Else 
    MsgBox objMSXML.parseError 
    End If 
End Sub 
+0

'objMSXML.selectSingleNode (sXPath)' ist falsch, es gibt keinen Knoten zurück. –

+0

ist eine andere Methode als 'selectSingleNode (sXPath)' erforderlich –

Verwandte Themen