TroxyMedlem sedan mars 20041 505 inlägg Hej, jag har precis testat använda XPath tillsammans med MSXML2 och VB.
Stämmer det att man alltid får tillbaka allting som noder med XPath?
Eller skiljer det sig beroende på vilken XML-parser man använder?
Vi tar detta simpla dokument:
<?xml version="1.0"?>
<root>
<foo>
<bar test="123" />
</foo>
</root>
Då vill jag hämta taggen bar med XPath såhär:
XmlDoc.selectSingleNode("/root/foo/bar")
Jag får då tillbaka en XMLDOMNode av typen 1, alltså ett element.
Men jag kan inte använda getAttribute("test") på en nod.
Hur gör jag om noden till ett element?
Tacksam för svar.
DavlidMedlem sedan okt. 200725 inlägg Hm, nu var det länge sedan jag satt med VB - och jag antar att det inte är .net eftersom du nämner MSXML2 och inte System.Xml.
Så, fritt ur minnet så tror jag att det går bra att hämta ett XmlElement direkt från selectSingleNode på nedanstående vis. Ett XmlElement är ju en XmlNode, och jag tror att man castar den automatiskt om man definierar objektet som en MSXML2.IXMLDOMElement.
Dim XmlDoc As New MSXML2.DOMDocument40
Dim XmlElement As MSXML2.IXMLDOMElement
XmlDoc.loadXML "<?xml version=""1.0""?><root> <foo> <bar test=""123"" /> </foo></root>"
Set XmlElement = XmlDoc.selectSingleNode("/root/foo/bar")
MsgBox XmlElement.getAttribute("test")
Är det vbscript ska det gå att göra såhär:
Set xmlSource = CreateObject("MSXML2.DOMDocument")
xmlSource.loadXML "<?xml version=""1.0""?><root> <foo> <bar test=""123"" /> </foo></root>"
Set Node = xmlSource.selectSingleNode("/root/foo/bar")
MsgBox Node.getAttribute("test")
Alternativt kan du ju hämta ut själva attributen - som ju är en XmlNode den också - direkt med Xpath:
Set XmlNode = XmlDoc.selectSingleNode("/root/foo/bar/@test")
MsgBox XmlNode.nodeValue