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