Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XPath未返回节点值_Xml_Xpath_Asp Classic_Msxml_Msxml6 - Fatal编程技术网

Xml XPath未返回节点值

Xml XPath未返回节点值,xml,xpath,asp-classic,msxml,msxml6,Xml,Xpath,Asp Classic,Msxml,Msxml6,这里有一个小问题,我正在为客户开发一个遗留的经典ASP应用程序,需要从XML文件中提取数据,但我无法获得单个节点的值,我的代码只返回一个值 我已经并且能够毫无问题地从XML文件中提取所有数据 XML文件 <?xml version="1.0" encoding="UTF-8"?> <Devices-Detail-Response> <PollCount>36593</PollCount> <DevicesConnected>

这里有一个小问题,我正在为客户开发一个遗留的经典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>

我得到了所需的值,问题是最多可能有24个传感器链接,ROMId是唯一标识符,因此我们确实需要对此进行筛选,因此我认为问题一定与XPATH字符串有关。

我认为您在替换块中缺少了一个
ElseIf
条件。


给定@SearchAndResQ在上面给出的指针,我对函数进行了如下修改:

Function GetTemperature(strXMLFile, strName)

Dim value
Dim objXML : Set objXML = CreateObject("MSXML2.DOMDocument.3.0")
objXML.async = False
objXML.load(strXMLFile)

Dim strXPath : strXPath = "/Devices-Detail-Response/owd_DS18B20[ROMId='" & strName & "']"
Dim xmlSensor       
For Each xmlSensor In objXML.documentElement.selectNodes(strXPath)
     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      
End Function
函数GetTemperature(strXMLFile,strName) 模糊值 Dim objXML:Set objXML=CreateObject(“MSXML2.DOMDocument.3.0”) objXML.async=False load(strXMLFile) Dim strXPath:strXPath=“/Devices Detail Response/owd_DS18B20[ROMId=”&strName&“]” Dim传感器 对于objXML.documentElement.selectNodes(strXPath)中的每个xmlSensor Dim romID:romID=xmlSensor.selectSingleNode(“romID”).text 变暗温度:温度=xmlSensor。选择单节点(“温度”)。文本 Response.Write Server.HTMLEncode(romID)和“
” Response.Write Server.HTMLEncode(温度)和“

” 下一个 端函数 注意,我已经删除了字符串替换部分,并将单引号硬编码到XPath字符串中


现在,即使连接了多个传感器,也能准确地提供所需的数据。:-)谢谢大家

@har07节点没有
InnerText
属性,您对
objNode.Value
的想法是什么。“如果我沿着XPath返回,我仍然什么也得不到”是什么意思?长方体不是什么,对吗?但您的意思是,例如XPath
/Devices Detail响应
返回一个非空的objNode,其.text属性不返回任何内容?@Lankymart
objNode.Value
也不返回任何内容,虽然我并没有说这是错的:-)@LarsH我的意思是,如果我删除XPath字符串的后面部分并向后工作,我会期望从树的更高层返回一些东西??如果我将
response.write(objXML.xml)
直接放在
objXML.load(strXMLFile)
之后,我会得到xml文件的完整输出,因此我知道我们正在读取和加载该文件,所以我猜问题一定在于XPath字符串或objNode部分,但我无法确定在哪里,因为我觉得这看起来很正常:-(不确定为什么否决:-(嗯,不确定似乎要做的只是将“2D000023C519A28”字符串一分为二,不确定问题出在哪里。您的最后一个
Else
,在没有条件的情况下,将
'
分配给所有没有
'
你是对的,基于此,我修正了问题,谢谢。@如果是这样的话,请接受这个作为答案。请参阅.Lankymart@SearchAndResQ answer Accepted:-)
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
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
Function GetTemperature(strXMLFile, strName)

Dim value
Dim objXML : Set objXML = CreateObject("MSXML2.DOMDocument.3.0")
objXML.async = False
objXML.load(strXMLFile)

Dim strXPath : strXPath = "/Devices-Detail-Response/owd_DS18B20[ROMId='" & strName & "']"
Dim xmlSensor       
For Each xmlSensor In objXML.documentElement.selectNodes(strXPath)
     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      
End Function