我有一个XML文档,这是我想要选择的节点:
最初我尝试使用其属性ID选择它,它工作正常:
<cfset local.XML = xmlParse(filePath)>
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER[@ID = 1051]"
)>
我现在尝试选择此xml节点及其xmlText为:
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER[text() = '4079']"
)>
但是我无法用它的文本选择这个节点。 我究竟做错了什么? 是否可以在单个语句中选择具有特定属性值和文本的节点? 这是示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<FILE>
<COLUMNS ID="1" xmlns="">
<HEADER ID="1134">
<![CDATA[11222]]>
</HEADER>
<HEADER ID="1135">
<![CDATA[Test Data]]>
</HEADER>
<HEADER ID="1136">
<![CDATA[Test Data]]>
</HEADER>
<HEADER ID="1151">
<![CDATA[4079]]>
</HEADER>
<HEADER ID="1137">
<![CDATA[Test Data]]>
</HEADER>
<HEADER ID="1144">
<![CDATA[Test Data]]>
</HEADER>
</COLUMNS>
<COLUMNS ID="2" xmlns="">
<HEADER ID="1134">
<![CDATA[11222]]>
</HEADER>
<HEADER ID="1135">
<![CDATA[Test Data]]>
</HEADER>
<HEADER ID="1136">
<![CDATA[Test Data]]>
</HEADER>
<HEADER ID="1151">
<![CDATA[4079]]>
</HEADER>
<HEADER ID="1137">
<![CDATA[4079]]>
</HEADER>
<HEADER ID="1144">
<![CDATA[4079]]>
</HEADER>
</COLUMNS>
</FILE>
现在我想用HEADER
选择所有xmlText = 4079
个节点。
请帮忙。提前谢谢。
答案 0 :(得分:1)
很难说没有XML样本进行测试,但我认为你只是缺少一个斜杠(“/”),例如:
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER/[text() = '4079']"
)>
答案 1 :(得分:1)
您可以尝试使用normalize-space()以及您拥有的XMLSearch。
<cfset search = XMLSearch(xmlobj,"//HEADER[@ID=1151][normalize-space(text())='4079']")/>
我在搜索中包含了ID属性以及文本值。
这样可以获得值为4079且ID为1151的HEADER项目。在您的示例XML中有两个这样的项目,因此如果您想要像COLUMNS过滤这样的唯一值,则可能需要执行更多操作。< / p>
normalize-space()将从左侧和右侧修剪空白并返回字符串值。