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?
Sie können einen XML-Parser verwenden und eine normale Logik damit ausführen –