Announcement

Collapse
No announcement yet.

Elemente mit/ohne bestimmte/n Attribute/n in neue Datei kopieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Elemente mit/ohne bestimmte/n Attribute/n in neue Datei kopieren

    Hallo!

    Ich habe folgende Dateien:

    Datei a)

    Code:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <bms>
    	<bm id="123" name="eins.xml" attsId="434">
    		<atts>
    			<att name="pfn" value="ln"/>
    			<att name="ot" value="def"/>
                            <att name="pfn" value="rtt"/>
    		</atts>
    	</bm>
     ...
    </bms>
    Diese Datei enthält mehrere bm-Elemente, die gleich aufgebaut sind

    Datei b)
    Code:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <file id="123" >
    	<ref id="5454" pfn="rtt"/>
    	<ref id="56546">
    		<ref id="898"  />
    		<ref id="9879" ot="def"/>
    	</ref>
    	<genref id="878768" />
            <ref id="4984" pfn="pdf"/>
    </file>
    [...]
    Und dann noch eine dritte Datei, die das Skript enthält, um das es hier geht. In dieser dritten Datei greife ich per doc-Funktion auf diese oberen beiden Dateien zu.

    Die Code-Stelle, an der ich sie aufrufe, sieht so aus:

    Code:
    	<xsl:for-each select="key('refs', @id, $refFile)">
    		<xsl:if test="@id = $curID">
    
    			<xsl:variable name="matcher" select="$bmsFile//bm[@id = $curID]//filter/@name"/>
    
    				<!-- kopieren, mit $matcher als Vergleich? -->
    
    		</xsl:if>
    	</xsl:for-each>
    Die Datei, auf die ich das Skript anwende, enthält einfach eine Liste von Elementen, über die ich mit for-each iteriere (apply-templates geht hier nicht)

    Nun zu meinem Problem:

    In der for-each-Schleife suche ich aus Datei b) das passende Element zum aktuell verarbeitenden Element. Das geht gut per key, ich suche einfach nach ddem Element mit derselben ID.

    Wenn ich dann in Datei b) das passende Element gefunden habe, muss ich dessen Kindelemente (die ref und genref-Elemente) in die Datei kopieren, die ich in der Transformation erzeuge.

    Das Problem: Ich brauche das Ganze im Prinzip zweimal:

    Einmal möchte ich aus Datei b) alle Kind-Elemente kopieren, die entweder keines der Attribute hat, die in Datei a) als atts vorhanden sind oder mindestens eines dieser Attribute. Und dann muss ich alle Kind-Elemente kopieren, die keines der Attribute aus Datei a) hat. Ich weiß, welche att-Elemente ich beachten muss, weil das bm-Element dieselbe ID hat wie das aktuelle Element in der for-each-Schleife.

    Also für obiges Beispiel wäre der Output einmal so:

    Code:
    <neuesElement>
    	<ref id="56546">
    		<ref id="898"  />
    	</ref>
    	<genref id="878768" />
            <ref id="4984" att="pdf"/>
    </neuesElement>
    Und einmal so:

    Code:
    <neuesElement>
    	<ref id="5454" pfn="rtt"/>
    	<ref id="56546">
    		<ref id="898"  />
    		<ref id="9879" ot="def"/>
    	</ref>
    	<genref id="878768" />
            <ref id="4984" pfn="pdf"/>
    </neuesElement>
    Diese ref-Elemente können auf verschiedenen Ebenen vorkommen und beliebig viele weitere Attribute haben.

    Wie kann ich beim Kopieren aus einer anderen Datei descendant-Elemente nach bestimmten Kriterien ausschließen?

    Für Tipps und Hilfen wäre ich dankbar!
Working...
X