xpath.evaluate可以从节点(列表)获取输入吗?

时间:2019-03-22 19:02:51

标签: java xpath

我有一个巨大的xml文档,需要从中解析一些数据。我已经到了可以在NodeList中获得所需数据的地步,但是如果有两个条目需要处理,那么我就需要对其进行操作以使某些节点聚在一起。因此,我希望您可以执行一个评估以获取NodeList1,然后在NodeList1上运行另一个评估以获取NodeList2,然后我可以取出需要的东西。我可能完全以错误的方式执行此操作..所以这是xml。

    <templateId root="123" />
    <id root="123" />
    <code code="51848-0" codeSystem="123" codeSystemName="LOINC" displayName="Assessments" />
    <title>Visit Diagnoses</title>
    <text>
        <table>
            <colgroup>
                <col width="100%" />
            </colgroup>
            <thead>
                <tr>
                    <th>Diagnosis</th>
                </tr>
            </thead>
            <tbody>
                <tr ID="vdx68" styleCode="normRow">
                    <td>
                        <paragraph>
                            <content ID="vdx68Name">Diagnosis Data 1</content>
                            <content> - Primary</content>
                        </paragraph>
                        <paragraph styleCode="allIndent">secondary diag data related to Primary</paragraph>
                    </td>
                </tr>
                <tr ID="vdx69" styleCode="altRow">
                    <td>
                        <paragraph>
                            <content ID="vdx69Name">Diagnosis Data 2</content>
                        </paragraph>
                    </td>
                </tr>
            </tbody>
        </table>
        <footnote ID="subTitle67" styleCode="xSectionSubTitle xHidden">documented in this encounter</footnote>
    </text>
</section>

这段代码将我带到该部分和“ vdx”行

NodeList nodeList = (NodeList) xpath.evaluate("//*[local-name()='code'][@code='51848-0']/following-sibling::*[local-name()='text']//*[local-name()='tr'][starts-with(@ID,'vdx')]", new InputSource(new StringReader(docString)), XPathConstants.NODESET );

  String diagnosis = null;

  if (null != nodeList) {
     log.debug("node count:" + nodeList.getLength());
     for (int i = 0; i < nodeList.getLength(); i++) {
        try {
           log.debug("DIAG Node Data:" + nodeList.item(i).getFirstChild().getTextContent());

           NodeList nodeList2 = (NodeList) xpath.evaluate("//*[local-name()='paragraph']", nodeList, XPathConstants.NODESET );)
           log.debug("DIAG Node Data2:" + nodeList2.item(i).getFirstChild().getTextContent());

        } catch (Exception e) {

        }
     }
  }

并给出这些痕迹

DIAG Node Data:Diagnosis Data 1 - Primarysecondary diag data related to Primary

DIAG Node Data:Diagnosis Data 2

所以数据在那里。.但我想摆脱主要文本,并在其后放破折号,然后再放置次要文本。

所以在上面您可以看到我试图创建一个新的nodeList2 ..,但是它必须抛出异常,因为它从不追踪任何内容。所以我想我什至不能做我想做的..或者我只是语法不正确。在Google上找不到我想要做的事情...

所以任何人都有关于我应该如何做的提示..或具有正确的语法来进行第二次评估?

0 个答案:

没有答案