Код:
package com.parse;
import org.w3c.dom.*;
import javax.xml.xpath.*;
import javax.xml.parsers.*;
import java.io.IOException;
import org.xml.sax.SAXException;
public class XpathDemoOld {
public static void main(String[] args)
throws ParserConfigurationException, SAXException,
IOException, XPathExpressionException {
DocumentBuilderFactory domFactory =
DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("xml.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
// XPath Query for showing all nodes value
XPathExpression expr = xpath.compile("/QDTM_IN300301QD/controlActEvent/subject/subject/testCodeIdentifier/coveredPartyOf/financialTransactionEvent/subjectOf/annotation/code[@code='CPTCODE']/following-sibling::text/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
System.out.println("Length --- " + nodes.getLength());
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("Node Value--->" + nodes.item(i).getNodeValue());
}
}
}
XML:
<?xml version="1.0" encoding="UTF-8"?>
<QDTM_IN300301QD ITSVersion="XML_1.0" xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v3 QDTM_IN300301QD.xsd ">
<id assigningAuthorityName="TEST" extension="6399Z"/>
<creationTime value="20111111121213" />
<responseModeCode code="I"/>
<versionCode code="V3-2010-12-Q2"/>
<interactionId extension="QDTM_IN300301QD"/>
<profileId extension="TBD"/>
<processingCode code="P"/>
<processingModeCode code="T"/>
<acceptAckCode code="NE"/>
<receiver typeCode="RCV">
<realmCode code="QD" />
<device classCode="DEV" determinerCode="INSTANCE" >
<realmCode code="QD" />
<id assigningAuthorityName="RECEIVERID" extension="TESTCENTER" /> <!-- These are identifiers for the recieving application and would be picked from the request message -->
</device>
</receiver>
<sender typeCode="SND">
<realmCode code="QD" />
<device classCode="DEV" determinerCode="INSTANCE" >
<realmCode code="QD" />
<id assigningAuthorityName="SENDERID" extension="QTIM" /> <!-- These are identifiers for the sending application and can be picked from the recieving section of the request message -->
</device>
</sender>
<controlActEvent classCode="CACT" moodCode="EVN">
<id assigningAuthorityName="TESTMESSAGEID" extension="6399Z" />
<code code="TBD">
</code>
<statusCode code="Active"/>
<subject contextConductionInd="true">
<registrationEvent classCode="REG" moodCode="EVN">
<realmCode code="QD" />
<statusCode code="Active"/>
<subject contextControlCode="AN" typeCode="SBJ">
<realmCode code="QD" />
<testCodeIdentifier classCode="ROL">
<id assigningAuthorityName="PRMKEY" extension="SJC6399Z"/> <!-- This is a unique key in case of JDOS information. Might not be needed in case of FD. If it is decided that this is not required for FD then this can be removed -->
<playingTestCodeDetails classCode="ENT" determinerCode="INSTANCE">
<realmCode code="QD" />
<id assigningAuthorityName="PRMORDCODE" extension="6399Z" /><!--This is the primary order code for the test. Would be NTC in case of a Master-->
<code code="6399Z" codeSystemName="QTIM" >
<originalText><![CDATA[Complete Blood Count]]></originalText>
<originalText><![CDATA[Blood Cells]]></originalText>
</code>
<statusCode code="Active"/>
<testCodeHasMember classCode="MBR" negationInd="true" >
<subjectOf typeCode="SBJ">
<annotation classCode="ACT" moodCode="EVN" >
<realmCode code="QD" />
<code code="INCLUDESHTMLENABLED"></code>
<text><![CDATA[WBC, RBC, Hemoglobin, Hematocrit, MCV, MCH, MCHC, RDW, Platelet Count, MPV and Differential (Absolute and Percent - Neutrophils, Lymphocytes, Monocytes, Eosinophils, and Basophils) <br />
If abnormal cells are noted on a manual review of the peripheral blood smear or if the automated differential information meets specific criteria, a full manual differential will be performed.]]></text> <!-- Includes information is being passed here -->
<statusCode code="Updated"/><!-- This flag would indicate if this field has been updated or not -->
</annotation>
</subjectOf>
</testCodeHasMember>
</playingTestCodeDetails>
<subjectOf typeCode="SBJ">
<realmCode code="QD" />
<order classCode="OBS" moodCode="EVN">
<realmCode code="QD" />
<performer typeCode="PRF">
<locatedEntity classCode="LOCE">
<locatedOrganization classCode="ORG" determinerCode="INSTANCE">
</locatedOrganization>
<subjectOf typeCode="SBJ">
<annotation classCode="ACT" moodCode="EVN">
<text><![CDATA[Quest Diagnostics Nichols Institute <br /> 33608 Ortega Highway <br /> San Juan Capistrano, CA 92690-6130]]></text> <!-- Performing lab address information would be passed here -->
<statusCode code="Update"/><!-- This is the update flag for the performing lab address field-->
</annotation>
</subjectOf>
</locatedEntity>
</performer>
<pertinentInformation2 typeCode="PERT">
<observationEvent classCode="OBS" moodCode="EVN">
<referenceRange nullFlavor="" typeCode="REFV">
<interpretationRange classCode="OBS" moodCode="EVN">
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="REFERENCERANGE"> <!-- Reference Range Information -->
</code>
<text><![CDATA[IgA SUBCLASSES __IgA1 (UOM mg/dL) 6-11 months: 1-115 mg/dL 1 year: 3-120 mg/dL 2 years: 7-132 mg/dL 3 years: 11-143 mg/dL 4-7 years: 23-175 mg/dL 8-11 years: 33-204 mg/dL 12-17 years: 47-249 mg/dL >=18 years: 46-378 mg/dL IgA SUBCLASSES __IgA2 (UOM mg/dL) 6-11 months: 0-19 mg/dL 1 year: 0-23 mg/dL 2 years: 1-23 mg/dL 3 years: 1-25 mg/dL 4-7 years: 2-33 mg/dL 8-11 years: 2-37 mg/dL 12-17 years: 4-50 mg/dL >=18 years: 13-91 mg/dL IgA SUBCLASSES __IgA, Serum (UOM mg/dL) 6-11 months: 3-101 mg/dL 1 year: 6-112 mg/dL 2 years: 11-134 mg/dL 3 years: 16-155 mg/dL 4-7 years: 31-214 mg/dL 8-11 years: 43-268 mg/dL 12-17 years: 65-356 mg/dL >=18 years: 81-463 mg/dL]]></text>
<statusCode code="token"/>
</annotation>
</subjectOf>
</interpretationRange>
</referenceRange>
</observationEvent>
</pertinentInformation2>
<pertinentInformation3 typeCode="PERT">
<scheduleEvent classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="SETUPSCHEDULE"/>
<text><![CDATA[Set up: 6 days a week a.m.; Report available: 2-3 days]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</scheduleEvent>
</pertinentInformation3>
<pertinentInformation3 typeCode="PERT">
<scheduleEvent classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="SETUPTIME"/>
<text><![CDATA[Set up: 6 days a week a.m.; Report available: 2-3 days]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</scheduleEvent>
</pertinentInformation3>
<pertinentInformation3 typeCode="PERT">
<scheduleEvent classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="SETUPDAYS"/>
<text><![CDATA[Sets up 6 days a week.]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</scheduleEvent>
</pertinentInformation3>
<pertinentInformation3 typeCode="PERT">
<scheduleEvent classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="REPORTAVAILABLE"/>
<text><![CDATA[2-3 days]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</scheduleEvent>
</pertinentInformation3>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="PREFERREDSPECIMEN"/>
<text><![CDATA[2 mL Second void urine <strong>or </strong>2-hour urine <strong>or </strong> 2 mL Urine with no preservative]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="MINIMUMVOLUME"></code>
<text><![CDATA[1 mL]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="OTHERACCEPTABLESPECIMEN"></code>
<text><![CDATA[2 mL Second void urine <strong>or </strong>2-hour urine <strong>or </strong> 2 mL Urine with no preservative]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="INSTRUCTIONS"></code>
<text><![CDATA[<strong>Whole Blood: </strong>Normal phlebotomy procedure. Store and ship <br /> room temperature immediately. Do not freeze. <br /> <strong><br /> Saliva:</strong> Collect saliva using Oragnene self collection kit. Store and ship room temperatur immediately. Do not freeze.]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="TRANSPORTCONTAINER"></code>
<text><![CDATA[APTIMA<sup>®</sup> transport tube]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="TRANSPORTTEMPERATURE"></code>
<text><![CDATA[<p>Refrigerated (cold packs)</p>]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="SPECIMENSTABILITY"></code>
<text><![CDATA[Room temperature: 48 hours<br /> Refrigerated: 7 days<br /> Frozen: 30 days]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="REJECTCRITERIA"></code>
<text><![CDATA[Specimens containing heparin; Leaking samples; Uncapped samples; Broken container; Non Aptima; Vaginal Swab Collection Kit]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation6 typeCode="PERT">
<specimenHandling classCode="ACT" moodCode="EVN" >
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="PATIENTPREPARATION"></code>
<text><![CDATA[<br/><b> Patient preparation:</b></br> Collect peak at end of 60 minutes IV infusion, 30 minutes after end of IV infusion, or 30-60 minutes after IM dose]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</specimenHandling>
</pertinentInformation6>
<pertinentInformation7 typeCode="PERT">
<medicalInformation classCode="ACT" moodCode="EVN">
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="METHODOLOGY"/>
<text><![CDATA[Real-Time Polymerase Chain Reaction (RT-PCR)]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</medicalInformation>
</pertinentInformation7>
<pertinentInformation7 typeCode="PERT">
<medicalInformation classCode="ACT" moodCode="EVN">
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="CLINICALSIGNIFICANCE"/>
<text><![CDATA[Maternal Cell Contamination Study, STR Analysis, provides assurance that test results from fetal specimens are not influenced by contaminating maternal material. This test also allows for establishing the proper maternal-fetal relationship between specimens by using sophisticated analysis of 15 highly polymorphic STR loci.]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</medicalInformation>
</pertinentInformation7>
<pertinentInformation7 typeCode="PERT">
<medicalInformation classCode="ACT" moodCode="EVN">
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="LIMITATION"/>
<text><![CDATA[Variations in two genes (VKORC1 and CYP2C9) are particularly important in warfarin metabolism. VKORC1 may explain 30% of the variability in drug response between patients and changes in CYP2C9 may explain 10% of the dose variation. While significant portion of the dose variability can be accounted for by genetic factors, this testing will not determine all factors associated with dose variability.]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</medicalInformation>
</pertinentInformation7>
<pertinentInformation7 typeCode="PERT">
<medicalInformation classCode="ACT" moodCode="EVN">
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="ASSAYVIEW"/>
<text><![CDATA[Sample Value]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</medicalInformation>
</pertinentInformation7>
<pertinentInformation7 typeCode="PERT">
<medicalInformation classCode="ACT" moodCode="EVN">
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN">
<code code="INDICATIONS"/>
<text><![CDATA[Sample Value]]></text>
<statusCode code="Updated"/>
</annotation>
</subjectOf>
</medicalInformation>
</pertinentInformation7>
</order>
</subjectOf>
<coveredPartyOf typeCode="COV">
<financialTransactionEvent classCode="XACT" moodCode="EVN">
<id extension="12343" assigningAuthorityName="BILLCODE"/>
<subjectOf typeCode="SUBJ">
<annotation classCode="ACT" moodCode="EVN" >
<realmCode code="QD" />
<code code="CPTCODE"></code>
<text><![CDATA[Sample Value]]></text><!-- CPT Code information would be passed here -->
<statusCode code="Updated"/><!-- Updated Flag for this field-->
</annotation>
</subjectOf>
</financialTransactionEvent>
</coveredPartyOf>
</testCodeIdentifier>
</subject>
<custodian contextControlCode="AP" typeCode="CST">
<assignedDevice classCode="ASSIGNED">
<realmCode code="QD" />
<id extension="QTIM"/>
<assignedRepository classCode="DEV" determinerCode="INSTANCE">
<name/>
</assignedRepository>
</assignedDevice>
</custodian>
</registrationEvent>
</subject>
</controlActEvent>
</QDTM_IN300301QD>
У меня есть вышеуказанный XML для анализа с использованием XPath; Я использую код в верхней части для анализа с помощью. Я предполагаю, что я делаю что-то не так, поскольку он не извлекает данные для текстового тега при доступе через код тега code attribute = "CPTCODE"
Заранее спасибо ...