Borde inte följande kod returnera en xml sträng med endast "price"-taggarna?? jag får hela trädet. Utan att ha minsta erfarenhet av MSXML lyckades jag lösa det m.h.a. Google. För att bara få texten i Price-elementen skriver man följande XPath-uttryck: Varför returnerar XPath hela xml-trädet?
<code>
<html>
<head>
<script>
function runTest(){
var xmlDoc = new ActiveXObject("msxml2.DOMDocument.3.0");
var selection;
var sXML='<?xml version="1.0" encoding="ISO-8859-1"?>' +
'<catalog>' +
'<cd country="USA">' +
'<title>Empire Burlesque</title>' +
'<artist>Bob Dylan</artist>' +
'<price>10.90</price>' +
'</cd>' +
'<cd country="UK">' +
'<title>Hide your heart</title>' +
'<artist>Bonnie Tyler</artist>' +
'<price>9.90</price>' +
'</cd>' +
'<cd country="USA">' +
'<title>Greatest Hits</title>' +
'<artist>Dolly Parton</artist>' +
'<price>9.90</price>' +
'</cd>' +
'</catalog>';
xmlDoc.loadXML(sXML);
xmlDoc.setProperty("SelectionLanguage", "XPath");
selection = xmlDoc.selectNodes("//price");
window.alert(selection.context.xml);
};
</script>
</head>
<body>
<input type="button" value="test" onClick="runTest()">
</body>
</html>
</code>Sv: Varför returnerar XPath hela xml-trädet?
Du får en lista med de funna noderna:xmlDoc.loadXML(sXML);
xmlDoc.setProperty("SelectionLanguage", "XPath");
selection = xmlDoc.selectNodes("//price");
for(var i=0; i<selection.length; i++)
alert(selection[i].nodeName);
Sv: Varför returnerar XPath hela xml-trädet?
//Price/text()
Detta XPath-uttryck returnerar ALLA Price-element som finns vartsomhelst i den underliggande informationsstrukturen.
För att returnera det första elementet skriver man följande uttryck:
//Price[1]/text()
Samma sak som
//Price[position()=1]/text()
För att iterera genom alla Price-element använder du det första XPath-uttrycket och sedan "xmlDoc.selectNodes" för att slutligen köra en "For Each" loop genom alla element.
Om du använder XSL-T finns <xsl:for-each> som itererar genom ett nodeset.
Med vänlig hälsning
Dan Jansson