通过不区分大小写的搜索查找元素名称

时间:2016-06-08 12:34:36

标签: xpath

给出以下三个XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <body>
        <customerSearchRequest>
            <id>1234</id>
        </customerSearchRequest>
    </body>
</root>

<?xml version="1.0" encoding="utf-8"?>
<root>
    <BODY>
        <userSearchRequest>
            <id>5678</id>
        </userSearchRequest>
    </BODY>
</root>


<?xml version="1.0" encoding="utf-8"?>
<root>
    <Body>
        <orderSearchRequest>
            <id>9101</id>
        </orderSearchRequest>
    </Body>
</root>

我需要提取body的第一个孩子的名字(即customerSearchRequestuserSearchRequestorderSearchRequest),我目前正在做如下:< / p>

name(//SOAP-ENV:body/*[1]) 

问题是,这仅适用于第一个请求,因为body区分大小写。如何使路径不区分大小写?

感谢您的任何指示。

1 个答案:

答案 0 :(得分:1)

我会这样做:

name(//SOAP-ENV:*[translate(local-name(),'BODY','body')='body']/*[1]) 

以下部分首先在SOAP-ENV的命名空间中查找元素,然后过滤到具有本地名称等于'body'的元素,不区分大小写:

//SOAP-ENV:*[translate(local-name(),'BODY','body')='body']

如果您有XPath 2.0,则可以使用lower-case()upper-case()或基于正则表达式的函数(例如matches()case-insensitive matching in xpath?