Select 具有特定 xml 文本和 coldfusion 属性值的 xml 节点
Select a xml node with specific xmlText and attribute value in coldfusion
我有一个 XML 文档,这是我想要的节点 select:
最初我尝试 select 它的属性 ID as 并且它工作正常:
<cfset local.XML = xmlParse(filePath)>
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER[@ID = 1051]"
)>
我现在正在尝试 select 这个 xml 节点及其 xml 文本为:
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER[text() = '4079']"
)>
但我无法 select 此节点及其文本。
我究竟做错了什么?
是否可以 select 具有特定属性值和文本的节点在单个语句中?
这是示例 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>
现在我想 select 所有 HEADER
个节点 xmlText = 4079
。
请帮忙。提前致谢。
如果没有 XML 样本进行测试很难判断,但我认为您只是缺少斜线(“/”),例如:
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER/[text() = '4079']"
)>
您可以尝试使用 normalize-space() 以及您拥有的 XMLSearch。
<cfset search = XMLSearch(xmlobj,"//HEADER[@ID=1151][normalize-space(text())='4079']")/>
我在搜索中包含了 ID 属性和文本值。
这应该会为您提供值为 4079 且 ID 为 1151 的 HEADER 项。您的示例中有两个 XML 因此,如果您想要一个唯一值,例如也按列过滤。
normalize-space() 将 trim 左侧和右侧的白色 space 和 returns 字符串值。
我有一个 XML 文档,这是我想要的节点 select:
最初我尝试 select 它的属性 ID as 并且它工作正常:
<cfset local.XML = xmlParse(filePath)>
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER[@ID = 1051]"
)>
我现在正在尝试 select 这个 xml 节点及其 xml 文本为:
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER[text() = '4079']"
)>
但我无法 select 此节点及其文本。 我究竟做错了什么? 是否可以 select 具有特定属性值和文本的节点在单个语句中? 这是示例 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>
现在我想 select 所有 HEADER
个节点 xmlText = 4079
。
请帮忙。提前致谢。
如果没有 XML 样本进行测试很难判断,但我认为您只是缺少斜线(“/”),例如:
<cfset local.header = xmlSearch(
local.XML,
"/FILE/COLUMNS/HEADER/[text() = '4079']"
)>
您可以尝试使用 normalize-space() 以及您拥有的 XMLSearch。
<cfset search = XMLSearch(xmlobj,"//HEADER[@ID=1151][normalize-space(text())='4079']")/>
我在搜索中包含了 ID 属性和文本值。
这应该会为您提供值为 4079 且 ID 为 1151 的 HEADER 项。您的示例中有两个 XML 因此,如果您想要一个唯一值,例如也按列过滤。
normalize-space() 将 trim 左侧和右侧的白色 space 和 returns 字符串值。