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 字符串值。