Может ли xpath.evaluate принимать входные данные от узла (списка)? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть гигантский 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 много информации о том, что я пытаюсь сделать ...

, так что у кого-нибудь есть советы о том, как я должен делать то, что мне нужно сделать ... или у меня правильный синтаксис для выполнения второй оценки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...