带有名称空间问题的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方面相当笨拙。