给出以下三个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
的第一个孩子的名字(即customerSearchRequest
,userSearchRequest
和orderSearchRequest
),我目前正在做如下:< / p>
name(//SOAP-ENV:body/*[1])
问题是,这仅适用于第一个请求,因为body
区分大小写。如何使路径不区分大小写?
感谢您的任何指示。
答案 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?