xml – 使用xpath获取xsi:type的值
发布时间:2020-12-16 00:00:28 所属栏目:百科 来源:网络整理
导读:我试图确定正确的XPath表达式,以返回Body元素上的xsi:type属性的值.我没有运气就尝试了所有的东西.根据我读到的内容,这似乎很接近,但显然不是正确的.任何快速指导,以便我终于可以休息了吗? //v20:Body/@xsi:type 我希望它返回v20:SmsMessageV1RequestBody
我试图确定正确的XPath表达式,以返回Body元素上的xsi:type属性的值.我没有运气就尝试了所有的东西.根据我读到的内容,这似乎很接近,但显然不是正确的.任何快速指导,以便我终于可以休息了吗?
//v20:Body/@xsi:type 我希望它返回v20:SmsMessageV1RequestBody <v20:MessageV1Request> <v20:Header> <v20:Source> <v20:Name>SOURCE_APP</v20:Name> <v20:ReferenceId>1326236916621</v20:ReferenceId> <v20:Principal>2001</v20:Principal> </v20:Source> </v20:Header> <v20:Body xsi:type="v20:SmsMessageV1RequestBody"> <v20:ToAddress>5555551212</v20:ToAddress> <v20:FromAddress>22222</v20:FromAddress> <v20:Message>TEST</v20:Message> </v20:Body> </v20:MessageV1Request>
正如评论中指出的那样,您有两种选择:
>使用local-name()引用目标节点,而不考虑名称空间 以下是如何在Java中执行后者: XPath xpath = XPathFactory.newInstance().newXPath(); NamespaceContext ctx = new NamespaceContext() { public String getNamespaceURI(String prefix) { if ("v20".equals(prefix)) { return "testNS1"; } else if ("xsi".equals(prefix)) { return "http://www.w3.org/2001/XMLSchema-instance"; } return null; } public String getPrefix(String uri) { throw new UnsupportedOperationException(); } public Iterator getPrefixes(String uri) { throw new UnsupportedOperationException(); } }; xpath.setNamespaceContext(ctx); XPathExpression expr = xpath.compile("//v20:Body/@xsi:type"); System.out.println(expr.evaluate(doc,XPathConstants.STRING)); 请注意,我假设以下命名空间声明: <v20:MessageV1Request xmlns:v20="testNS1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 您需要更新getNamespaceURI才能使用实际值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 怎样实现依赖注入功能之笔记
- C语言求向量和的两则问题解答分享
- c – 成员函数如何知道为特定对象调用它?
- ios – Codesign返回未知错误-1 = ffffffffffffffff
- iphone – UITextView textViewShouldBeginEditing在多次点
- postgresql的now()与Oracle的sysdate
- JZ2440的NandFlash控制器
- React native 在android上真机调试
- c# – Convert.FromBase64String(…)抛出FormatException
- Arm 2440——Nand flash启动模式详解(LED程序为例)