2016-06-09 25 views
0

Die Abfrage besteht darin, das erste untergeordnete Element mit dem Wert zu ermitteln, in dem das entsprechende übergeordnete Element mehr als ein untergeordnetes Element enthalten sollte.Wählen Sie das übergeordnete Element und das erste untergeordnete Element aus, das über mehr als ein untergeordnetes Element verfügt

Hier ist schwierig, Problem ist, dass Eltern-und Kind-Element dynamisch generiert wird. das heißt, wir wissen nicht über die Eltern und Kind Namen

Hier ist der XML-Input:

<PageTwo> 
 
\t \t \t <List25>No</List25> 
 
\t \t \t <List11>Air Gun|Gun</List11> 
 
\t \t \t <Multilist02> 
 
\t \t \t \t <Value>.204</Value> 
 
\t \t \t \t <Value>.22</Value> 
 
\t \t \t \t <Value>.243</Value> 
 
\t \t \t </Multilist02> 
 
\t \t \t <Multilist05> 
 
\t \t \t \t <Value>Air Gun|NOS|NOS</Value> 
 
\t \t \t \t <Value>Optic|Binocular|ZULU5</Value> 
 
\t \t \t </Multilist05> 
 
\t \t \t <List23>DAK</List23> 
 
\t \t \t <Text01>NA</Text01> 
 
\t \t \t <List13>EA</List13> 
 
\t \t \t <List26>No</List26> 
 
\t \t \t <List07>IN</List07> 
 
\t \t \t <List08>LB</List08> 
 
\t \t </PageTwo>

In dem obigen XML, Multilist enthält mehr als ein Kind-Wert und muss das erste untergeordnete Element mit Wert

extrahieren. Beispiel [Ausgenommen] Ausgang

  <Multilist02> 
 
\t \t \t  <Value>.204</Value> 
 
\t \t \t </Multilist02> 
 
\t \t \t <Multilist05> 
 
\t \t \t \t <Value>Air Gun|NOS|NOS</Value> 
 
\t \t \t </Multilist05>

Wie ich schon sagte, in der eingehenden xml wir wissen nicht, welcher Name für Eltern und Kind-Element kommen wird.

ich versuchte unten XSLT und der Lage, das erste Kind zu extrahieren, aber nicht in der Lage, das Kind zu bedecken mit Mutterelement

<?xml version="1.0" encoding="UTF-8"?> 
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.oracle.com/webfolder/technetwork/xml/plm/2014/08/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/xml/plm/2014/08/ http://www.oracle.com/webfolder/technetwork/xml/plm/2014/08/aXML.xsd"> 
 
<xsl:template match="/"> 
 
<xsl:for-each select="/PageTwo/*"> 
 
<xsl:for-each select="*"> 
 
<xsl:variable name="i" select="position()" /> 
 
<xsl:if test="$i = 1"> 
 
<xsl:copy-of select="."/> 
 
</xsl:if> 
 
</xsl:for-each> 
 
</xsl:for-each> 
 
</xsl:template> 
 
</xsl:stylesheet>

Erzeugter Ausgang entspricht:

<?xml version="1.0" encoding="UTF-8"?><Value>.204</Value><Value>Air Gun|NOS|NOS</Value>

helfen Sie mir 10

freundlicher zu diesem Thema

EDIT: Unten Antwort obige Frage gelöst, die ich als Antwort akzeptiert

Hinzufügen eine weitere Abfrage über XML-Eingabedatei mit Attributen zu Root-Knoten hinzugefügt wird.

New Input: Added Attribute Knoten

<PageTwo xmlns="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/ http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/aXML.xsd" creator="admin, nawaz(nawaz)"> 
 
\t \t \t <List25>No</List25> 
 
\t \t \t <List11>Air Gun|Gun</List11> 
 
\t \t \t <Multilist02> 
 
\t \t \t \t <Value>.204</Value> 
 
\t \t \t \t <Value>.22</Value> 
 
\t \t \t \t <Value>.243</Value> 
 
\t \t \t </Multilist02> 
 
\t \t \t <Multilist05> 
 
\t \t \t \t <Value>Air Gun|NOS|NOS</Value> 
 
\t \t \t \t <Value>Optic|Binocular|ZULU5</Value> 
 
\t \t \t </Multilist05> 
 
\t \t \t <List23>DAK</List23> 
 
\t \t \t <Text01>NA</Text01> 
 
\t \t \t <List13>EA</List13> 
 
\t \t \t <List26>No</List26> 
 
\t \t \t <List07>IN</List07> 
 
\t \t \t <List08>LB</List08> 
 
\t \t </PageTwo>

Angenommen, wenn ich das Element analysieren eher mit ihrem Namen * als Antwort angibt, auf der unten Lösung, die ich

akzeptiert wollen auszurotten

Aktuelle Antwort

<xsl:template match="/"> 
 
    <xsl:apply-templates select="*/*[*[2]]"/> 
 
</xsl:template> 
 

 
<xsl:template match="*"> 
 
    <xsl:copy> 
 
    <xsl:copy-of select="@* | *[1]"/> 
 
    </xsl:copy> 
 
</xsl:template>

Auch Kann ich die Elemente analysieren, um ihre entsprechenden Namen angeben, wenn Attribute in dem Wurzelknoten nicht vorhanden sind. Aber ich möchte das Element mit ihrem Namen mit Root-Knoten analysieren Attribute

Gestellte Lösung

<?xml version="1.0" encoding="UTF-8"?><PageTwo xmlns="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/ http://www.oracle.com/webfolder/technetwork/xml/plm/2/2/aXML.xsd" creator="admin, nawaz(nawaz)"> 
 
    <Multilist02> 
 
\t \t \t  <Value>.204</Value> 
 
    </Multilist02> 
 
    <Multilist05> 
 
\t \t \t \t <Value>Air Gun|NOS|NOS</Value> 
 
    </Multilist05> 
 
</PageTwo>

Zustand das Element mit ihren Namen Parse anzuzeigen

+0

Ist ' \t \t \t .204 \t \t \t \t \t \t \t \t \t \t Luftgewehr | NOS | NOS \t \t \t' die komplette Ausgabe, die Sie wollen, keine anderen Elemente, n o Wurzelelement? –

+0

@MartinHonnen will ich ja nur 0,204 Luftgewehr | NOS | NOS nawazlj

Antwort

0

Verwenden Sie

<xsl:template match="/"> 
    <xsl:apply-templates select="*/*[*[2]]"/> 
</xsl:template> 

<xsl:template match="*"> 
    <xsl:copy> 
    <xsl:copy-of select="@* | *[1]"/> 
    </xsl:copy> 
</xsl:template> 
+0

Dank für die Hilfe. Möchte die Verwendung von "@ * | * [1]" wissen. Angenommen, es wird noch ein Super-Elternteil über dem obigen XML-Code vorhanden sein, wird es funktionieren? – nawazlj

+0

Wenn Sie mehrere Ebenen haben, dann bearbeiten Sie bitte Ihre Frage und zeigen Sie uns ein Beispiel davon und die entsprechende Ausgabe, die Sie wollen, plus die Regeln, die die gewünschte Ausgabe bestimmen. Momentan verarbeitet das '' alle untergeordneten Elemente des Wurzelelements, die mindestens zwei untergeordnete Elemente haben, und die zweite Vorlage erstellt dann einfach ein seichtes Element Kopie dieser Elemente plus Kopieren des ersten Kindelements. –

+0

Ich habe es, wenn wir größere Elternelement haben, dann können wir analysieren, indem wir/* in Bezug auf die Anzahl der Ebenen hinzufügen – nawazlj

Verwandte Themen