-1

ここに小さな問題があります。私は顧客向けの従来のクラシック 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 文字列に関係していると思われます。

4

2 に答える 2

1

ElseIf置換ブロックに条件 がないと思います。

If InStr(strName, "'") > 0 And InStr(strName, """") = 0 Then
        strName = """" & strName & """"
    ElseIf InStr(strName, "'") = 0 And InStr(strName, """") > 0 Then
        strName = "'" & strName & "'"
    ElseIf InStr(strName, "'") > 0 And  InStr(strName, """") > 0 Then
        ''// both single and double quotes in a string are unsupported
        strName = "''"  
End If
于 2014-08-17T07:06:33.917 に答える