Folks ....這是我最近詢問的一個類似問題的後續。如何從XML結構中檢索特定的值,而不必沿着結構遍歷並遍歷所有的子節點?有人建議我應該使用XPath。在ASP頁面中處理XML - 第2部分
假設以下簡單的XML結構:
<MyWeather>
<sensor location="Front Entry">
<reading label="Temperature">
<title>Front Entry</title>
<label>Temperature</label>
<value>54</value>
<units>F</units>
<lastUpdate>05/27/2013 12:23 AM</lastUpdate>
</reading>
<reading label="Humidity">
<title>Front Entry</title>
<label>Humidity</label>
<value>66</value>
<units>%</units>
<lastUpdate>05/27/2013 12:23 AM</lastUpdate>
</reading>
</sensor>
<sensor location="Patio">
<reading label="Temperature">
<title>Patio</title>
<label>Temperature</label>
<value>46</value>
<units>F</units>
<lastUpdate>05/27/2013 12:23 AM</lastUpdate>
</reading>
<reading label="Humidity">
<title>Patio</title>
<label>Humidity</label>
<value>93</value>
<units>%</units>
<lastUpdate>05/27/2013 12:23 AM</lastUpdate>
</reading>
</sensor>
</MyWeather>
這裏是我的ASP頁面的一部分:
<%
xmlDoc = CreateObject("Msxml2.DOMDocument")
xmldoc.setProperty ("ServerHTTPRequest", true)
xmlDoc.setProperty ("ProhibitDTD", False)
xmlDoc.validateOnParse = true
' Filename is a sting variable containing the URL
xmlDoc.async = "False"
xmlDoc.load(FileName)
' Error and return code processing done here but removed
For Each el In xmldoc.childNodes
if el.childnodes.length <> 0 then
response.write ("<table align='center' class='auto-style1'>")
for each el2 in el.childnodes
Response.write("<tr><td>" & el2.getattribute("location") & "</td><td></td></tr>")
for each el3 in el2.childnodes
for each el4 in el3.childnodes
if el4.nodename = "value" then
Response.write("<tr><td></td><td>" & el3.getattribute("label") & " " & el4.text & " " & el4.nextSibling.text & "</td></tr>")
exit for
end if
next
next
next
response.write ("</table>")
end if
Next
xmlDoc = Nothing
%>
我的問題是關於在「的代碼對於每個EL4 ...「部分。你會發現我遍歷了子節點,直到找到「值」。然後我輸出該標籤值,並且,因爲我知道下一個標籤(現在直到他們改變它),所以我使用nextposition來獲取該值。 此代碼有效!
我想知道的是: 有沒有更直接的方式來爲傳感器位置和閱讀標籤的任意組合這兩個變量值沒有我的迭代過程。
我有幾個其他情況下,我可能需要遍歷50多個元素來找到我正在尋找的標籤。
我添加了這個xPath代碼,基於我之前的問題的建議。這一點,如果它的工作將取代「每個EL4在el3.childnodes環」上述
xmlDoc.setProperty ("SelectionLanguage", "XPath")
oNode = xmldoc.selectSingleNode("//reading[@label='Temperaure']/units")
o2Node = xmldoc.selectSingleNode("//reading[@label='Temperaure']/value")
if oNode is nothing or o2node is nothing then
Response.write("<tr><td></td><td> Nothing found for value or units </td><td>" & el3.getattribute("label") & "</tr>")
else
Response.write("<tr><td></td><td>" & el3.getattribute("label") & " " & o2Node.text & " " & oNode.text & "</td></tr>")
end if
但是,它並沒有爲我工作。我嘗試了幾個變種:沒有@符號和oNode語句中的完整路徑,即/ MyWeather/sensor/reading/...
我對空的oNode和/或O2Node的檢查總是如此。
任何想法?..... RDK
你真的上查詢「Temperaure」?那麼你最好修復這個錯字。 –