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_Coldfusion - Fatal编程技术网

Xml 给定键的值的XPath?

Xml 给定键的值的XPath?,xml,xpath,coldfusion,Xml,Xpath,Coldfusion,我已从下面创建了一个XML对象: <?xml version="1.0" encoding="UTF-8"?> <pdfDoc> <XMLOutput> <webservice> <residentLocationData> <addressDataMap> <entry> <key&

我已从下面创建了一个XML对象:

<?xml version="1.0" encoding="UTF-8"?>
<pdfDoc>
  <XMLOutput>
    <webservice>
      <residentLocationData>
        <addressDataMap>
          <entry>
            <key>Zip</key>
            <value>08094</value>
          </entry>
          <entry>
            <key>CountyCode</key>
            <value>015</value>
          </entry>
          <entry>
            <key>StateName</key>
            <value>New Jersey</value>
          </entry>
        </addressDataMap>
      </residentLocationData>
    </webservice>
  </XMLOutput>
<pdfDoc>
但是我在网上没有看到任何关于如何仅使用XPath本身获取该元素的xmlText的字符串值的内容。我可以使用我正在使用的语言(Coldfusion)中的代码获取该字符串:



但我不清楚如何仅使用XPath获取字符串“newjersey”。

//addressDataMap/entry/key[text()='StateName']/following sibling::value/text()

string(//addressDataMap/entry/key[text()='StateName']/以下同级::value)

应该有效。

尝试使用

//addressDataMap/entry[key/text()='StateName']/value/text()
它应该给你字符串“newjersey”。

这个XPath

//entry[key='StateName']/value/text()

将根据请求选择与
'StateName'
键相关联的
“newjersey”
值。

我已尝试了建议的XPath。使用以“/text()”结尾的数组,我得到的不是字符串,而是一个包含三对结构的单元素数组:

XmlName = #text
XmlType = TEXT
XmlValue = New Jersey
这可能是因为我使用的是Coldfusion函数xmlSearch()。这应该返回与XPath表达式返回的数据类型相同的数据类型,但在本例中可能不是这样。但那很好。使用以下工具轻松获取字符串:

<cfset strState = xmlSearch(L.xmlObj, "//workLocationData/addressDataMap/entry[key/text() = 'StateName']/value/text()")[1].xmlValue>


这比我以前使用的“跟随兄弟”要好,以防“value”元素在其兄弟“key”元素之前出现。

首先,这里的后续操作不是答案;应该将它添加到问题的末尾。其次,XPath的结尾为
/text()
将选择文本节点。典型的XPath库在根据XML计算XPath时将返回选定节点的集合。第三,t将取决于特定库及其宿主语言,但您可以尝试使用
string()
函数包装单个选定节点(…
value/text()
value
),它将获取其参数的字符串值。例如,这将是
string(//entry[key='StateName']/value/text())
或者更简单地说是
string(//entry[key='StateName']/value)
。同样,确保XPath参数只选择一个节点——如果
值是唯一的,则该参数应该是可行的。
XmlName = #text
XmlType = TEXT
XmlValue = New Jersey
<cfset strState = xmlSearch(L.xmlObj, "//workLocationData/addressDataMap/entry[key/text() = 'StateName']/value/text()")[1].xmlValue>