在根元素的语法中使用命名空间前缀解析 XML - Java

我有一个XML形式:


<?xml version="1.0" encoding="UTF-8"?>

<semseg:Envelope xmlns:semseg="http://a-random-URL" xmlns="http://another-random-URL">

    <semseg:subject>Subject</semseg:subject>

    <semseg:Sender>

        <semseg:name>Me</semseg:name>

    </semseg:Sender>

    <Triangle>

        <Triangle time='2017-11-29'>

            <Triangle key='a' value='b'/>

            <Triangle key='c' value='d'/>

            <Triangle key='e' value='f'/>

            <Triangle key='g' value='h'/>

        </Triangle>

    </Triangle>

</semseg:Envelope>

我试图检索元<Triangle>(不 <Triangle time='2017-11-29'>-元素名称是在这个XML有点重复)使用XPath。部分代码如下:


DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

documentBuilderFactory.setNamespaceAware(true);

DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

Document doc = documentBuilder.parse("file.xml");


XPathFactory xPathFactory = XPathFactory.newInstance();

XPath xPath = xPathFactory.newXPath();

XPathExpression xpr = xPath.compile("/semseg:Envelope/Triangle");

NodeList nodes = (NodeList)xpr.evaluate(doc, XPathConstants.NODESET);

XPath不幸的是,由于没有选择任何元素,我已经尝试了许多可能的组合,但没有任何运气。尽管如此,XPath使用这个在线XPath检查器和相同的XML文件测试相同的结果会产生我正在寻找的结果。它甚至适用于使用 XPaths 进行属性检索,例如


/semseg:Envelope/Triangle/Triangle/@time

似乎命名空间前缀有问题。解析XML没有任何命名空间前缀的 s 与XPath.


九州编程
浏览 189回答 1
1回答

有只小跳蛙

这对我有用/\*[local-name()='Envelope']/\*[local-name()='Triangle']/\*[local-name()='Triangle']/@time
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java