2016-04-25 2 views
0

Ich habe die folgende XML-Antwort zu setzen:Wie analysieren und zusammen Stücke von Text aus einer XML-Antwort Java

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <MetaData> 
     <xpath>/Temporary/EIC/HaveInaccurateInfo</xpath> 
     <enumeration>AtLeastOneConditionTrue</enumeration> 
     <scenario>TRUE_BECAUSE_OF_ONE_CONDITION</scenario> 
     <Template> 
      <Text id="1">You don't qualify because </Text> 
      <PertinentDataInputNodeNameListInline id="2" 
       >ApplicableConditions</PertinentDataInputNodeNameListInline> 
      <Text id="3">.</Text> 
     </Template> 
    </MetaData> 

    <MetaData> 
     <xpath>/Temporary/EIC/DisqualifiedBecauseAllQualifyingChildrenHaveITIN</xpath> 
     <scenario>DISQUALIFIED</scenario> 
     <Template> 
      <Text id="1">Your eligibility for this credit is not affected since </Text> 
      <PertinentDataInputNodeNameListInline id="2">ApplicableConditions</PertinentDataInputNodeNameListInline> 
      <Text id="3">.</Text> 
     </Template> 
    </MetaData> 
</data> 

Ich möchte in der Lage sein, eine Java-Klasse schreiben zu können, kombinieren/konstruieren die Textknoten unter dem Template Knoten, wenn ich in xpath und scenario übergeben (auf diese Weise wissen wir, welche Vorlage zu verwenden).

Beispiel:

public String constructSentence(String xpath, String scenario) { 
    // some processing here 

    return constructedSentence; 
} 

Ausgang:

Sie nicht qualifizieren, weil ApplicableConditions.

etc ...

Wie kann ich diese mit Hilfe von Java erreichen? Was ist der beste Ansatz? Irgendwelche Empfehlungen? Ich habe viele Male gehört, Regex zu verwenden, um xml zu analysieren, wäre eine Sünde, ich bin ein noob, also würde jede Hilfe oder Vorschläge sehr geschätzt werden.

Edit:

Okay, ich etwas hier habe, aber es scheint, dass ich zusammen mit vollständigen Sätzen unvollständigen Satz bin Gebäude.

String h = new String(); 
List<String> sent = new ArrayList<>(); 
Document doc = getDocumentXML(xml); 
doc.normalize(); 
System.out.println("Root node: " + doc.getDocumentElement().getNodeName()); 

NodeList nList = doc.getElementsByTagName("Template"); 

for (int tmp = 0; tmp < nList.getLength(); tmp++) { 
    Node nNode = nList.item(tmp); 

    if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
     NodeList nl = nNode.getChildNodes(); 

     for(int j=0; j<nl.getLength(); j++) { 
      Node node = nl.item(j); 

      if(nl.item(j).getNodeType() == Node.ELEMENT_NODE) { 
       Element e = (Element) node; 

       if(e.hasAttribute("id")) { 

        String nameNode = e.getNodeName(); 

        System.out.println("GetNodeName: "+nameNode); 

        Integer currentAttrNum = Integer.parseInt(e.getAttribute("id")); 
        h += e.getTextContent(); 
        System.out.println("Current id num: "+currentAttrNum); 

        if(e.getNodeType() == Node.ELEMENT_NODE && !e.getNextSibling().hasAttributes()) { 
         System.out.println("last sibling"); 
         sent.add(h); 
        } 
       } 
      } 
     } 
     for(String s : sent) { 
      System.out.println("Sentence: "+s); 
     } 
    } 
} 

bekomme ich folgende Ausgabe in meiner foreach-Schleife:

Sentence: You don't qualify because 
Sentence: You don't qualify because ApplicableConditions 
Sentence: You don't qualify because ApplicableConditions. 
Sentence: You don't qualify because ApplicableConditions.Your eligibility for this credit is not affected since 
Sentence: You don't qualify because ApplicableConditions.Your eligibility for this credit is not affected since ApplicableConditions 
Sentence: You don't qualify because ApplicableConditions.Your eligibility for this credit is not affected since ApplicableConditions. 

ich nur haben:

Sentence: You don't qualify because ApplicableConditions. 
Sentence: Your eligibility for this credit is not affected since ApplicableConditions. 

Können Sie den Fehler in meinem Code finden?

+1

Sie können einen XML-Parser verwenden und eine normale Logik damit ausführen –

Antwort

0

Ich weiß nicht viel über XML (und ich meine gar nichts) aber ich werde versuchen zu helfen. Wenn Sie eine Textausgabe bekommen Sie return in Java, können Sie diesen Text nehmen und

/*regexNameHere is the name you give the array, inputTextVar is the variable 
*(make sure it's a string!) assigned to the text you receive from the XML process 
*/ 
String [] (regexNameHere) = (inputTextVar).split("character to split by"); 
//This is what you use to declare variables... 
String var1 = regexNameHere[0]; 
String var2 = regexNameHere[1]; 

Und so weiter entlang der Linien von etwas tun. Wenn die Variable regexNameHere gleich der Zeichenfolge "Regex split string" und das .split Argument (" ") (ein Leerzeichen) wäre, dann würde regexNameHere[0] gleich "Regex" sein, die regexNameHere[1] wäre "split" und regexNameHere[2] wäre "string".

Wenn Sie so etwas wie die „ApplicableConditions“ in Ihren Text teilen möchten, würde ich mir vorstellen, Sie setzen „anwendbar“ ebenso wie das .split Argument, und regexNameHere[0] entspräche „anwendbar“ und regexNameHere[1] würde gleich sein „Bedingungen.“

Hoffe das half, und viel Glück!

Verwandte Themen