加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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()引用目标节点,而不考虑名称空间
>使用XPath引擎正确注册所有名称空间

以下是如何在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才能使用实际值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读