ここに小さな問題があります。私は顧客向けの従来のクラシック ASP アプリケーションに取り組んでおり、XML ファイルからデータを取得する必要がありますが、単一のノードの値を取得できません。私のコードは何も返しません。
問題なく XML ファイルからすべてのデータを取得できます。
XML ファイル
<?xml version="1.0" encoding="UTF-8"?>
<Devices-Detail-Response>
<PollCount>36593</PollCount>
<DevicesConnected>1</DevicesConnected>
<LoopTime>1.031</LoopTime>
<DataErrors>0</DataErrors>
<DeviceName>OW_SERVER-Enet</DeviceName>
<HostName>EDSOWSERVER</HostName>
<MACAddress>00:50:C2:91:B3:9C</MACAddress>
<owd_DS18B20 Description="Programmable resolution thermometer">
<Name>DS18B20</Name>
<Family>28</Family>
<ROMId>2D0000023C519A28</ROMId>
<Health>7</Health>
<RawData>61014B467FFF0F1002FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</RawData>
<PrimaryValue>22.0625 Deg C</PrimaryValue>
<Temperature Units="Centigrade">22.0625</Temperature>
<UserByte1 Writable="True">75</UserByte1>
<UserByte2 Writable="True">70</UserByte2>
<Resolution>12</Resolution>
<PowerSource>255</PowerSource>
</owd_DS18B20>
</Devices-Detail-Response>
xml-text.asp ファイル
<%
Option Explicit
Response.Write GetTemperature("http://192.168.1.85/details.xml", "2D0000023C519A28")
Function GetTemperature(strXMLFile, strName)
Dim objXML : Set objXML = CreateObject("Msxml2.DOMDocument.6.0")
objXML.async = False
objXML.SetProperty "SelectionLanguage", "XPath"
objXML.SetProperty "ServerHTTPRequest", True
objXML.load(strXMLFile)
''// enclose in single- or double quotes accordingly
If InStr(strName, "'") > 0 And InStr(strName, """") = 0 Then
strName = """" & strName & """"
ElseIf InStr(strName, "'") = 0 And InStr(strName, """") > 0 Then
strName = "'" & strName & "'"
Else
''// both single and double quotes in a string are unsupported
strName = "''"
End If
Dim strXPath : strXPath = "/Devices-Detail-Response/owd_DS18B20[ROMId=" & strName & "]/Temperature"
Dim objNode : Set objNode = objXML.documentElement.selectSingleNode(strXPath)
If Not objNode Is Nothing Then
value = objNode.text
End If
End Function
%>
はvalue = objNode.text
単純に何も返さず、XPath に沿って戻っても何も返されません。
遅くなりましたが、単純なものが欠けていることはわかっています?!?
乾杯、
オジー
更新:次のことを行うと、ここで少し更新できます:
Dim xmlSensor
For Each xmlSensor In objXML.documentElement.selectNodes("owd_DS18B20")
Dim romID : romID = xmlSensor.selectSingleNode("ROMId").text
Dim temperature : temperature = xmlSensor.selectSingleNode("Temperature").text
Response.Write Server.HTMLEncode(romID) & "<br />"
Response.Write Server.HTMLEncode(temperature) & "<br /><br />"
Next
必要な値を取得しました。問題は、最大 24 個のセンサーがリンクされている可能性があり、ROMId が一意の識別子であるため、これをフィルタリングする必要があるため、問題は XPATH 文字列に関係していると思われます。