2017-01-25 3 views
0

Ich habe eine eindeutige XML-Datei, die ich mit einer XSL-Datei transformieren möchte, um den Import durch eine andere Anwendung zu unterstützen. Ich bin sehr neu in der XML-Transformation und auf einer kurzen Zeitleiste, also vergib mir, wenn ich nicht jede letzte Website, die Google auf die ideale Weise zurückgibt, erschöpft habe.Concat in einer Schleife innerhalb der XSL-Datei?

Die ursprüngliche XML (die zunächst von JSON umgewandelt wird)

<?xml version="1.0" encoding="UTF-8" ?> 
<SecurityGroups> 
    <Description>DEV-CUSTOMER-VPC-AD</Description> 
    <Tags> 
     <Value>DEV-CUSTOMER-VPC-AD</Value> 
     <Key>Name</Key> 
    </Tags> 
    <IpPermissions> 
     <FromPort>42424</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>42424</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>464</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>464</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>4500</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>4500</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>389</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>389</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>53</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>53</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>3389</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>3389</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>445</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>445</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>1813</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>1813</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>1900</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>1900</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>139</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>139</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>135</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>135</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>53</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>53</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>500</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>500</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>52997</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>57000</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>80</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>80</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>464</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>464</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>593</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>593</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>389</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>389</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>123</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>123</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>443</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>443</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>9389</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>9389</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>3268</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>3269</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>88</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>88</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>52997</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>57000</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>137</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>138</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>1812</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>1812</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>2869</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>2869</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>636</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>636</ToPort> 
     <IpProtocol>tcp</IpProtocol> 
    </IpPermissions> 
    <IpPermissions> 
     <FromPort>88</FromPort> 
     <IpRanges> 
      <CidrIp>10.0.0.0/8</CidrIp> 
     </IpRanges> 
     <ToPort>88</ToPort> 
     <IpProtocol>udp</IpProtocol> 
    </IpPermissions> 
    <GroupName>DEV-CUSTOMER-VPC-AD</GroupName> 
    <VpcId>vpc-a2a754c7</VpcId> 
    <OwnerId>006895185235</OwnerId> 
    <GroupId>sg-27c51342</GroupId> 
</SecurityGroups> 

Ich habe folgende XSL-Datei so weit:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="/SecurityGroups"> 
    <SecurityGroups> 
    <Description><xsl:value-of select="Description" /></Description> 
    <Name><xsl:value-of select="GroupName" /></Name> 
    <xsl:value-of select="."/> 
    <xsl:if test="following::FromPort">;</xsl:if> 
    </SecurityGroups> 
</xsl:template> 
</xsl:stylesheet> 

ich die FromPort ganzen Zahlen möchte Komma wie die erscheinen seprated folgende XML.

<?xml version="1.0" encoding="utf-8"?> 
<Export type="PortList" date="January 25, 2017 19:03" version="9.6.3177"> 
    <PortLists> 
     <PortList id="119"> 
      <TBUID></TBUID> 
      <Name>Active Directory Domain Services</Name> 
      <Description>Mainly for Active Directory Servers North of 2k8 to 2k12</Description> 
      <Items>88,1812,137-138,123,445,500,1813,1900,52997 - 57000,53,389,464</Items> 
      <Version></Version> 
      <UserEdited>true</UserEdited> 
     </PortList> 
    </PortLists> 
</Export> 

Wenn jemand da draußen einige dies erkennt Ich versuche, ein AWS Security Group für die automatisierten Import in eine Trendmicro DSM Firewall-Regel zu analysieren.

Jede Hilfe würde sehr geschätzt werden.

Antwort

0

Ihre Frage ist ziemlich verwirrend, weil die Ausgabe, die Sie zeigen, nicht die exakte Ausgabe zu sein scheint, die Sie wollen.

Versuchen Sie dies als Ausgangspunkt:

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:template match="/SecurityGroups"> 
    <SecurityGroups> 
     <Description> 
      <xsl:value-of select="Description" /> 
     </Description> 
     <Name> 
      <xsl:value-of select="GroupName" /> 
     </Name> 
     <Items> 
      <xsl:for-each select="IpPermissions"> 
       <xsl:value-of select="FromPort"/> 
       <xsl:if test="position()!=last()"> 
        <xsl:text>,</xsl:text> 
       </xsl:if> 
      </xsl:for-each> 
     </Items> 
    </SecurityGroups> 
</xsl:template> 

</xsl:stylesheet> 

auf Ihre Eingabe Beispiel angewendet wird, wird das Ergebnis sein:

<?xml version="1.0" encoding="UTF-8"?> 
<SecurityGroups> 
    <Description>DEV-CUSTOMER-VPC-AD</Description> 
    <Name>DEV-CUSTOMER-VPC-AD</Name> 
    <Items>42424,464,4500,389,53,3389,445,1813,1900,139,135,53,500,52997,80,464,593,389,123,443,9389,3268,88,52997,137,1812,2869,636,88</Items> 
</SecurityGroups>