在coldfusion中选择具有特定xmlText和属性值的xml节点

时间:2015-02-16 08:19:05

标签: xml coldfusion xml-parsing

我有一个XML文档,这是我想要选择的节点:

enter image description here

最初我尝试使用其属性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个节点。 请帮忙。提前谢谢。

2 个答案:

答案 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()将从左侧和右侧修剪空白并返回字符串值。