【问题标题】:Java XML with namespace issue具有命名空间问题的 Java XML
【发布时间】:2012-08-04 20:35:20
【问题描述】:

我有这个代码:

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

我的问题是getElementsByTagName("xnat:MRSession.scan.file")

我的 xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?><xnat:MRSession "REMOVED DATA IGNORE">
<xnat:sharing>
<xnat:share label="23_MR1" project="BOGUS_GSU">
<!--hidden_fields[xnat_experimentData_share_id="1",sharing_share_xnat_experimentDa_id="xnat_E00001"]-->
</xnat:share>
</xnat:sharing>
<xnat:fields>
<xnat:field name="studyComments">
<!--hidden_fields[xnat_experimentData_field_id="1",fields_field_xnat_experimentDat_id="xnat_E00001"]-->S</xnat:field>
</xnat:fields>
<xnat:subject_ID>xnat_S00002</xnat:subject_ID>
<xnat:scanner manufacturer="GE MEDICAL SYSTEMS" model="GENESIS_SIGNA"/>
<xnat:prearchivePath>/home/ryan/xnat_data/prearchive/BOGUS_OUA/20120717_131900137/23_MR1</xnat:prearchivePath>
<xnat:scans>
<xnat:scan ID="1" UID="1.2.840.113654.2.45.2.108830" type="SAG LOCALIZER" xsi:type="xnat:mrScanData">
<!--hidden_fields[xnat_imageScanData_id="1"]-->
<xnat:image_session_ID>xnat_E00001</xnat:image_session_ID>
<xnat:quality>usable</xnat:quality>
<xnat:series_description>SAG LOCALIZER</xnat:series_description>
<xnat:scanner manufacturer="GE MEDICAL SYSTEMS" model="GENESIS_SIGNA"/>
<xnat:frames>29</xnat:frames>
<xnat:file URI="/home/ryan/xnat_data/archive/BOGUS_OUA/arc001/23_MR1/SCANS/1/DICOM/scan_1_catalog.xml" content="RAW" file_count="29" file_size="3968052" format="DICOM" label="DICOM" xsi:type="xnat:resourceCatalog">

所以基本上我需要能够遍历所有 xnat:MRSession/xnat:scan/xnat:file 元素并进行一些更改。问题是

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

始终为空。请帮忙。谢谢

【问题讨论】:

  • 文档中的哪些内容让您认为它应该按照您的使用方式工作?
  • 我不清楚文档。我只需要知道特定 xnat:file 元素的正确语法是什么。任何你能照在这上面的光都会非常有帮助。显然我错过了一些东西。
  • 在我看来,您需要的是 xPath,而不是 getElementsByTagName
  • xpath 啊?有什么例子可以指点我吗?
  • @user1332868 Google 和 javadocs 应该可以帮助您入门。也就是说,在这种情况下,我会使用像 JDOM 这样的替代 DOM,当涉及到 XPath 时,W3C API 相当尴尬。

标签: java xml


【解决方案1】:

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

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

在您的示例中,您需要指定带有前缀“xnat”的确切命名空间,而不是 XNAT_NAMESPACE。

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多