2011-12-20 8 views
1

コード:は、java +属性を取得するために必要としているXMLの解析は次の兄弟値にアクセスするためにチェック+ XPATH

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を持って

<?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>&nbsp;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>&nbsp;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>&reg;</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> 

XPath;私は上のコードを使用して解析するために使用しています。私は...私はコードタグのcode属性=「CPTCODE」事前に

おかげでアクセスしたとき、それはテキストタグのデータをフェッチしていないとして、何か間違ったことをやっていると思います

答えて

0

これは、XPathの中で最もよくある質問です(XPathとデフォルトネームスペースを検索)。要するに、Xpathは、接頭辞のない名前を常に「名前空間なし」に属するものとして扱います。

XMLドキュメントにはデフォルトの名前空間を持っていない場合は、プレフィックスのない名前を持つ任意の要素は、「名前空間なし」に実際に属していると表現:

/name1/name2 

は、トップ要素の子であるname2という名前の任意の要素を選択し、 name1という名前です。 「名前空間なし」(すべての要素がデフォルトであり、非内要素がないので

/name1/name2 

は、何も選択しない:XML文書がグローバルに定義されたデフォルトの名前空間と同じ表現を有している場合には

名前がname1,name2、またはwhatevernameの要素を選択しようとすると0要素が選択されます。

ソリューション

は、それに関連する接頭辞 "名前空間を登録する" ためにあなたのXPath ENGINのAPIを使用して、"x"を言います。次に、式を次のように書き換えます。

/x:name1/x:name2 

この最後の式は、目的のノードを正しく選択します。

関連する問題