带有名称空间问题的Java XML

带有名称空间问题的Java XML,java,xml,Java,Xml,我有以下代码: org.w3c.dom.Document doc = docBuilder.parse(representation.getStream()); Element element = doc.getDocumentElement(); NodeList nodeList = element.getElementsByTagName("xnat:MRSession.scan.file");

我有以下代码:

org.w3c.dom.Document doc = docBuilder.parse(representation.getStream());
                Element element = doc.getDocumentElement();
                NodeList nodeList = element.getElementsByTagName("xnat:MRSession.scan.file");
                for (int i = 0; i < nodeList.getLength(); i++) {
                    Node node = nodeList.item(i);
                    if (node.getNodeType() == Node.ELEMENT_NODE) {
                        // do something with the current element
所以基本上我需要能够遍历所有的xnat:MRSession/xnat:scan/xnat:file 元素并进行一些更改。问题是

getElementsByTagName("xnat:MRSession.scan.file")

始终为空。请帮忙。谢谢,您可以使用XPath尝试以下操作:

Document document = // the parsed document
XPathFactory xPathFactory = XPathFactory.newInstance();
NodeList allFileNodes = xPathFactory.newXPath().evaluate("\\XNAT_NAMESPACE:file", document.getDocumentElement(), XPathConstants.NODESET);

在示例中,您需要指定前缀为“XNAT”的确切名称空间,而不是XNAT_名称空间。

您可以使用XPath尝试以下操作:

Document document = // the parsed document
XPathFactory xPathFactory = XPathFactory.newInstance();
NodeList allFileNodes = xPathFactory.newXPath().evaluate("\\XNAT_NAMESPACE:file", document.getDocumentElement(), XPathConstants.NODESET);

您需要在示例中指定前缀为“XNAT”的确切名称空间来代替XNAT_名称空间。

文档中的什么内容使您认为它应该以您使用它的方式工作?文档对我来说不清楚。我只需要知道特定于xnat:file元素的正确语法是什么。你能照到的任何光线都会很有帮助。显然,我遗漏了一些东西。在我看来,您需要的是xPath,而不是
getElementsByTagName
。xPath是吗?你能给我举个例子吗?@user1332868谷歌和javadocs应该让你从这里开始。也就是说,我会使用类似JDOM的替代DOM在本例中,W3C API在XPath方面相当笨拙。文档中的什么内容让您认为它应该以您使用它的方式工作?文档对我来说不清楚。我只需要知道特定于xnat:file元素的正确语法是什么。你能照到的任何光线都会很有帮助。显然,我遗漏了一些东西。在我看来,您需要的是xPath,而不是
getElementsByTagName
。xPath是吗?你能给我举个例子吗?@user1332868谷歌和javadocs应该让你从这里开始。也就是说,我将使用类似JDOM的替代DOM。在本例中,W3CAPI在XPath方面相当笨拙。