Servus,
ich habe eine Liste mit Elementnamen. Wird der Elementname innerhalb der einen XML-Datei gefunden, so soll der Elementname mit einem Wert (bisher einfach ein Dummywert aus einer Liste (EuList.java), später aus einer Datenbank) in eine andere XML-Datei geschrieben werden.
Ich habe also eine Template-XML, in die der Wert eines Elements nur geschrieben werden soll, wenn das Element auch in der anderen XML gefunden wurde. Ich hoffe, dass ich mich verständlich ausgedrückt habe.
Das Problem ist nun, dass das Schreiben in die Template-XML nicht funktioniert. Hier der Code:
Hierbei wird die templateFilePath zunächst einfach in eine outputFilePath kopiert (das Template-File soll schließlich unberührt bleiben).
Hierzu habe ich in EuParser.java eine einfache Kopier-Methode geschrieben:
Die parse-Methode sieht so aus:
Ich habe die beiden xPathes getestet. Sie funktionieren. Die korreten Nodes werden sowohl im Template- als auch in der einzulesenden XML-Datei gefunden. Mit euNode.getTextContent wird der korrekte Wert ausgegeben. Mache ich ein euNode.setTextContent("HALLO") und gebe es dann per euNode.getTextContent aus, erscheint in der Konsole auch mein "HALLO". Aber im XML-File steht nach wie vor der alte Wert.
Ich hoffe, dass ich alles ausreichend beschrieben habe und dass mir jemand bei meinem Problem helfen kann. Vielen Dank!
ich habe eine Liste mit Elementnamen. Wird der Elementname innerhalb der einen XML-Datei gefunden, so soll der Elementname mit einem Wert (bisher einfach ein Dummywert aus einer Liste (EuList.java), später aus einer Datenbank) in eine andere XML-Datei geschrieben werden.
Ich habe also eine Template-XML, in die der Wert eines Elements nur geschrieben werden soll, wenn das Element auch in der anderen XML gefunden wurde. Ich hoffe, dass ich mich verständlich ausgedrückt habe.
Das Problem ist nun, dass das Schreiben in die Template-XML nicht funktioniert. Hier der Code:
Java:
//input file path
final String announcementFilePath = "input.xml";
//template file path
final String templateFilePath = "EUAnnoucementTemplate.xml";
//output file path
final String outputFilePath = "EUAnnouncementXML_" + System.currentTimeMillis() / 1000 + ".xml";
//list of contents
EuList contentList = new EuList();
//xPath expressions
String templateExpression;
String euExpression;
//create parser
EuParser parser = new EuParser();
//copy template file
parser.templateCopy(templateFilePath, outputFilePath);
//select each element and parse value to EU announcement
for(Map.Entry<String, String> entry : contentList.getNameValueMap().entrySet())
{
//value to insert
templateExpression = entry.getKey();
//xpath for eu file
euExpression = "//" + templateExpression.substring(16, templateExpression.length()-1);
//xPath results
String announcementFileResult = (String) parser.parseFile(announcementFilePath, templateExpression, XPathConstants.STRING);
// String euFileResult = (String) parser.parseFile(outputFilePath, euExpression, XPathConstants.STRING);
//check whether required element is also in template and in announcement file
if(announcementFileResult == "true")
{
// if(euFileResult != "")
// {
System.out.println(euExpression);
Node euNode = (Node) parser.parseFile(outputFilePath, euExpression, XPathConstants.NODE);
euNode.setTextContent(entry.getValue());
System.out.println(euNode.getTextContent());
...
Hierbei wird die templateFilePath zunächst einfach in eine outputFilePath kopiert (das Template-File soll schließlich unberührt bleiben).
Hierzu habe ich in EuParser.java eine einfache Kopier-Methode geschrieben:
Java:
public void templateCopy(String templateFilePath, String newFilePath)
{
//set files
File templateFile = new File(templateFilePath);
File newFile = new File(newFilePath);
FileReader in;
FileWriter out;
try
{
//create reader and writer
in = new FileReader(templateFile);
out = new FileWriter(newFile);
//copy
int c;
while ((c = in.read()) != -1)
{
out.write(c);
}
//close readers
in.close();
out.close();
}
...
Die parse-Methode sieht so aus:
Java:
public Object parseFile(String xmlFilePath, String expression, QName type)
{
try
{
//create DOM document
Document xmlFile = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlFilePath);
//create xPath
XPath xPath = XPathFactory.newInstance().newXPath();
XPathExpression xPathExpression = xPath.compile(expression);
//return element value
return xPathExpression.evaluate(xmlFile, type);
...
Ich habe die beiden xPathes getestet. Sie funktionieren. Die korreten Nodes werden sowohl im Template- als auch in der einzulesenden XML-Datei gefunden. Mit euNode.getTextContent wird der korrekte Wert ausgegeben. Mache ich ein euNode.setTextContent("HALLO") und gebe es dann per euNode.getTextContent aus, erscheint in der Konsole auch mein "HALLO". Aber im XML-File steht nach wie vor der alte Wert.
Ich hoffe, dass ich alles ausreichend beschrieben habe und dass mir jemand bei meinem Problem helfen kann. Vielen Dank!