nur bestimmte daten herausfiltern und anzeigen

Compane

Mitglied
Servus zusammen;

Ich habe folgende XML Struktur:

<content>b_20080704102628_backup</content>
<Item 1>Text1 (1).bak</Item 1>
<Item 2>Text1 (10).txt</Item 2>
<Item 3>Text1 (11).txt</Item 3>
<Item 4>Text1 (12).alf</Item 4>
<Item 5>Text1 (3).dmp</Item 5>
<Item 6>Text1 (4).sav</Item 6>
<Item 7>Text1 (5).txt</Item 7>
<Item 8>Text1 (6).txt</Item 8>
<Item 9>Text1 (7).txt</Item 9>
<Item 10>Text1 (8).txt</Item 10>
<Item 11>Text1 (9).txt</Item 11>
<Item 12>text2.cdc</Item 12>
<content>b_20080704102628_backup</content>
<content>b_20080704102704_backup</content>
<Item 14>Text1 (1).bak</Item 14>
<Item 15>Text1 (10).txt</Item 15>
<Item 16>Text1 (11).txt</Item 16>
<Item 17>Text1 (12).alf</Item 17>
<Item 18>Text1 (3).dmp</Item 18>
<Item 19>Text1 (4).sav</Item 19>
<Item 20>Text1 (5).txt</Item 20>
<Item 21>Text1 (6).txt</Item 21>
<Item 22>Text1 (7).txt</Item 22>
<Item 23>Text1 (8).txt</Item 23>
<Item 24>Text1 (9).txt</Item 24>
<Item 25>text2.cdc</Item 25>
<content>b_20080704102704_backup</content>
<content>b_20080704105146_backup</content>
<Item 27>Text1 (1).bak</Item 27>
<Item 28>Text1 (10).txt</Item 28>
<Item 29>Text1 (11).txt</Item 29>
<Item 30>Text1 (12).alf</Item 30>
<Item 31>Text1 (3).dmp</Item 31>
<Item 32>Text1 (4).sav</Item 32>
<Item 33>Text1 (5).txt</Item 33>
<Item 34>Text1 (6).txt</Item 34>
<Item 35>Text1 (7).txt</Item 35>
<Item 36>Text1 (8).txt</Item 36>
<Item 37>Text1 (9).txt</Item 37>
<Item 38>text2.cdc</Item 38>
<content>b_20080704105146_backup</content>

nun möchte ich per suche (Bsp.: text2.cdc) alle Knoten anzeigen lassen in der der name vorkommt, so in etwa:

b_20080704102628_backup text2.cdc
b_20080704105146_backup text2.cdc

Dadurch das alle knoten keine Festen werte haben, habe ich gerade eine Denkblockade!
Könnt ihr mir weiterhelfen?

grüße

Compane
 
Zuletzt bearbeitet:
Wie willst Du suchen? Aus einer Anwendung heraus? Java? In einem XSLT-File. Mit einer xquery?

Ein bißchen mehr Information wäre gut.
 
Servus,

Die struktur hatte ich nochmal geändert:

<Datei>
<archiv>b_20080704102628_backup</archiv>
<Item>Text1 (1).bak</Item>
<Item>Text1 (10).txt</Item>
<Item>Text1 (11).txt</Item>
<Item>Text1 (12).alf</Item>
<Item>Text1 (3).dmp</Item>
<Item>Text1 (4).sav</Item>
<Item>Text1 (5).txt</Item>
<Item>Text1 (6).txt</Item>
<Item>Text1 (7).txt</Item>
<Item>Text1 (8).txt</Item>
<Item>Text1 (9).txt</Item>
<Item>text2.cdc</Item>
<archiv>b_20080704102628_backup</archiv>
</Datei>
<Datei>
<archiv>b_20080704102704_backup</archiv>
<Item>Text1 (1).bak</Item>
<Item>Text1 (10).txt</Item>
<Item>Text1 (11).txt</Item>
<Item>Text1 (12).alf</Item>
<Item>Text1 (3).dmp</Item>
<Item>Text1 (4).sav</Item>
<Item>Text1 (5).txt</Item>
<Item>Text1 (6).txt</Item>
<Item>Text1 (7).txt</Item>
<Item>Text1 (8).txt</Item>
<Item>Text1 (9).txt</Item>

<archiv>b_20080704102704_backup</archiv>
</Datei>
<Datei>
<archiv>b_20080704105146_backup</archiv>
<Item>Text1 (1).bak</Item>
<Item>Text1 (10).txt</Item>
<Item>Text1 (11).txt</Item>
<Item>Text1 (12).alf</Item>
<Item>Text1 (3).dmp</Item>
<Item>Text1 (4).sav</Item>
<Item>Text1 (5).txt</Item>
<Item>Text1 (6).txt</Item>
<Item>Text1 (7).txt</Item>
<Item>Text1 (8).txt</Item>
<Item>Text1 (9).txt</Item>
<Item>text2.cdc</Item>
<archiv>b_20080704105146_backup</archiv>
</Datei>

Aber die Lösung müsste immer noch die gleiche sein:
nun möchte ich per suche (Bsp.: text2.cdc) alle Knoten anzeigen lassen in der der name vorkommt, so in etwa:

b_20080704102628_backup text2.cdc
b_20080704105146_backup text2.cdc

Dadurch das alle knoten keine Festen werte haben, habe ich gerade eine Denkblockade!
Könnt ihr mir weiterhelfen?


In Java wäre nicht schlecht so könnte ich Ajax mit einbringen aber xslt könnte auch gehen!

Ich lade die file mit den Inhalten direkt in meine php oder html seite und will mehr aber nur die bestimmten Knoten und dateinamen nach einer sucheingabe ausgeben lassen.

Danke schonmal :)
 
Mit XSLT geht sowas gut. Ich hätte Dir eine Lösung gebaut, aber Deine Struktur sieht seltsam aus. Das Archiv-Tag kommt mit dem selben Wert doppelt vor (Am Anfang und am Ende von<datei>). Ist das Absicht, oder soll das ein öffnendes und ein schließendes Tag darstellen?
 
Ich habe Dein XML-File ein wenig umgebaut. Wenn das nicht geht, bekommst Du eine Lösung für Deine Struktur;

Das XML File:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
	<Datei>
		<archiv name="b_20080704102628_backup">
			<Item>Text1 (1).bak</Item>
			<Item>Text1 (10).txt</Item>
			<Item>Text1 (11).txt</Item>
			<Item>Text1 (12).alf</Item>
			<Item>Text1 (3).dmp</Item>
			<Item>Text1 (4).sav</Item>
			<Item>Text1 (5).txt</Item>
			<Item>Text1 (6).txt</Item>
			<Item>Text1 (7).txt</Item>
			<Item>Text1 (8).txt</Item>
			<Item>Text1 (9).txt</Item>
			<Item>text2.cdc</Item>
		</archiv>
	</Datei>
	<Datei>
		<archiv name="b_20080704102704_backup">
			<Item>Text1 (1).bak</Item>
			<Item>Text1 (10).txt</Item>
			<Item>Text1 (11).txt</Item>
			<Item>Text1 (12).alf</Item>
			<Item>Text1 (3).dmp</Item>
			<Item>Text1 (4).sav</Item>
			<Item>Text1 (5).txt</Item>
			<Item>Text1 (6).txt</Item>
			<Item>Text1 (7).txt</Item>
			<Item>Text1 (8).txt</Item>
			<Item>Text1 (9).txt</Item>
		</archiv>
	</Datei>
	<Datei>
		<archiv name="b_20080704105146_backup">
			<Item>Text1 (1).bak</Item>
			<Item>Text1 (10).txt</Item>
			<Item>Text1 (11).txt</Item>
			<Item>Text1 (12).alf</Item>
			<Item>Text1 (3).dmp</Item>
			<Item>Text1 (4).sav</Item>
			<Item>Text1 (5).txt</Item>
			<Item>Text1 (6).txt</Item>
			<Item>Text1 (7).txt</Item>
			<Item>Text1 (8).txt</Item>
			<Item>Text1 (9).txt</Item>
			<Item>text2.cdc</Item>
		</archiv>
	
	</Datei>
</root>

Das XSLT-File zur Textausgabe. Kann auch zue ausgabe einer HTML-Tabelle umgebaut werden.
XML:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >

	<xsl:output method="text" />
	
	<xsl:param name="filename" select="''" />
	<xsl:param name="CRLF" select="'
'" />
	
	<!-- Einsprungpunkt der Verarbeitung  -->
	<xsl:template match="/">
		<xsl:apply-templates select="//archiv[Item=$filename]"/>
	</xsl:template>
	
	<xsl:template match="archiv">
		<xsl:value-of select="@name" />=<xsl:value-of select="$filename" /><xsl:value-of select="$CRLF" />
	</xsl:template>

	
</xsl:stylesheet>

Das Javatest-Programm. musst Du halt auf PHP umschreiben.
Java:
package de.tutorials;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class FinderDemo {

	public static void main(String[] args) {

		try {
			DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
					.newInstance();
			documentBuilderFactory.setNamespaceAware(true);
			DocumentBuilder documentBuilder = documentBuilderFactory
					.newDocumentBuilder();

			Document document = documentBuilder.parse("NewFile.xml");
			Element element = (Element) document.getChildNodes().item(0);

			TransformerFactory transformerFactory = TransformerFactory
					.newInstance();

			
			Transformer transformer = transformerFactory.newTransformer(new StreamSource("NewFile.xsl"));
			transformer.setParameter("filename", "text2.cdc");
			transformer.transform(new DOMSource(document), new StreamResult(System.out));

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

und die Ausgabe:

b_20080704102628_backup=text2.cdc
b_20080704105146_backup=text2.cdc



Dieses Tool zeigt den Wert für CRLF nicht richtig an dort steht in select ein einfaches Gänsefüßchen gefolgt von einem & # 13 ; dann & # 10 ; Gänsefüßchen. alles ohne Blanks
 
Zuletzt bearbeitet von einem Moderator:
und hier eine Lösung mit der Xpath-Engine ohne XSLT.

Java:
package de.tutorials;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;



public class Finder2Demo {

	public static void main(String[] args) {

		try {
			String filename = "text2.cdc";
			
			DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
					.newInstance();
			documentBuilderFactory.setNamespaceAware(true);
			DocumentBuilder documentBuilder = documentBuilderFactory
					.newDocumentBuilder();

			Document document = documentBuilder.parse("NewFile.xml");
			
			XPathFactory factory = XPathFactory.newInstance();
			XPath xPath = factory.newXPath();
			
			String expression = String.format("//archiv[Item='%s']", filename);
			XPathExpression xPathExpression = xPath.compile(expression);

			NodeList result = (NodeList) xPathExpression.evaluate(document, XPathConstants.NODESET);
			
			for (int i = 0; i < result.getLength(); i++) {
				System.out.println(((Element)result.item(i)).getAttribute("name")+ "=>" + filename);
			}


		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
 
Servus,

danke für deinen antworten :)

ich werde alle samt mal durchprobieren und dir dann gleichmal bescheid geben!
 
grüße

sorry ich hatte javascript gemeint :-(

Das construct habe ich deinen angeglichen!

Mit Java komme ich nicht so klar!
 
Servus

also ich habe das xslt probiert da habe ich aber keine ausgabe bekommen:

und mit reinen java kenne ich mich nicht so aus aber halt mit javascript etwas.

Mein gedankengang war halt so: per suchfeld gebe ich einen dateinamen an und per onclick
führe ich eine function aus die die xml-daten nach den werten durchsucht!
 

Neue Beiträge

Zurück