2016-07-24 56 views
0

Ich bin neu in XSLT arbeiten an XML zu XML-Transformation. Ich möchte abhängig von der Bedingung ein Element in der XML-Datei hinzufügen.Wie füge ich ein neues Element in das XML mit XSLT ein

Ich habe diese Mitarbeiterinformationen und Anforderung ist es, das Tag innerhalb des Elements für jeden einzelnen Mitarbeiter hinzuzufügen.

**Scenario1** 
<Employee> 
<Name>Check1</Name> 
<Position> 
    <org> 
    <orgName>COMPANY</orgName> 
    <orgType>ABC</orgTyp> 
    <org> 
</Position> 
</Employee> 

**Scenario2** 
<Employee> 
<Name>Nitesh</Name> 
<Position> 
    <role>Consultant</role> 
</Position> 
</Employee> 

**Scenario3** 
<Employee> 
<Name>Nitesh</Name> 
</Employee> 

Ich schrieb den folgenden Code, aber es gibt mir nicht gewünschten Ausgang.

`

<xsl:when test="not(xs:Position)"> 
    <xsl:copy> 
     <!-- And everything inside it --> 
     <xsl:apply-templates select="@* | node()"/> 
     <!-- Add node --> 
     <xs:Position> 
      <xs:Organization> 
       <xs:Organization_Type>1<xsl:value-of select="$OrgType"/> 
       </xs:Organization_Type> 
       <xs:Organization_Code>2<xsl:value-of select="$OrgCode"/> 
       </xs:Organization_Code> 
       <xs:Organization_Name>3<xsl:value-of select="$OrgName"/> 
       </xs:Organization_Name> 
      </xs:Organization> 
     </xs:Position> 
    </xsl:copy> 
</xsl:when> 
<xsl:when test="xs:Position"> 
    <xsl:variable name="element" select="xs:Position"/> 
    <xsl:choose> 
     <xsl:when test="not(xs:Position/xs:Organization/xs:Organization_Type='COMPANY')"> 
      <xs:Organization> 
       <xs:Organization_Type>1<xsl:value-of select="$OrgType"/> 
       </xs:Organization_Type> 
       <xs:Organization_Code>2<xsl:value-of select="$OrgCode"/> 
       </xs:Organization_Code> 
       <xs:Organization_Name>3<xsl:value-of select="$OrgName"/> 
       </xs:Organization_Name> 
      </xs:Organization> 
      <xsl:copy-of select="$element"/> 
     </xsl:when> 
    </xsl:choose> 
</xsl:when>` 
+0

Was ist das erwartete Ergebnis in jedem Szenario? –

+0

Ausgabe wie Szenario 1 –

+0

"* Ausgabe wie Szenario 1 *" Wirklich? Sie wollen also den Knoten Berater in Szenario 2 nicht ausgeben? –

Antwort

0

Ich habe Ihr versucht Code nicht verstehen - esp. da große Teile davon fehlen.

ich denken, Sie wollen, wie etwas zu tun ist:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:variable name="default-org"> 
    <org> 
     <orgName>default name</orgName> 
     <orgType>default type</orgType> 
    </org> 
</xsl:variable> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Employee[not(Position)]"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     <Position> 
      <xsl:copy-of select="$default-org"/> 
     </Position>  
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Position[not(org)]"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     <xsl:copy-of select="$default-org"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

Bei dem folgenden Test Eingang:

XML

<root> 
    <Employee> 
     <Name>A</Name> 
     <Position> 
     <org> 
      <orgName>COMPANY</orgName> 
      <orgType>ABC</orgType> 
     </org> 
     </Position> 
    </Employee> 
    <Employee> 
     <Name>B</Name> 
     <Position> 
     <role>Consultant</role> 
     </Position> 
    </Employee> 
    <Employee> 
     <Name>C</Name> 
    </Employee> 
</root> 

wird das Ergebnis sein:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <Employee> 
     <Name>A</Name> 
     <Position> 
     <org> 
      <orgName>COMPANY</orgName> 
      <orgType>ABC</orgType> 
     </org> 
     </Position> 
    </Employee> 
    <Employee> 
     <Name>B</Name> 
     <Position> 
     <role>Consultant</role> 
     <org> 
      <orgName>default name</orgName> 
      <orgType>default type</orgType> 
     </org> 
     </Position> 
    </Employee> 
    <Employee> 
     <Name>C</Name> 
     <Position> 
     <org> 
      <orgName>default name</orgName> 
      <orgType>default type</orgType> 
     </org> 
     </Position> 
    </Employee> 
</root>