GOOGLE ADS

Mittwoch, 13. April 2022

benötigen xsl, das die Datei in das erforderliche Format umwandelt

Probleme beim Formatieren der XML-Datei. Benötigen Sie das untenstehende XML, um in das erwähnte Format formatiert zu werden. müssen die Werte auch in Kleinbuchstaben übersetzt werden.

Geben Sie XML ein

`<?xml version="1.0" encoding="UTF-8"?>
<serviceConfig>
<consumer id="1">
<cn>A</cn>
<cn>B</cn>
<cn>C</cn>
</consumer>
<consumer id="2">
<cn>D</cn>
<cn>E</cn>
</consumer>
<consumer id="3">
<cn>F</cn>
</consumer>
<consumer id="4">
<cn>G</cn>
<cn>H</cn>
<cn>I</cn>
</consumer>
<consumer id="5">
<cn>J</cn>
<cn>K</cn>
<cn>M</cn>
</consumer>
</serviceConfig>`

Erforderliche Ausgabe

<serviceConfig>
<consumer id="1">a</consumer>
<consumer id="1">b</consumer>
<consumer id="1">c</consumer>
<consumer id="2">d</consumer>
<consumer id="2">e</consumer>
<consumer id="3">f</consumer>
<consumer id="4">g</consumer>
<consumer id="4">h</consumer>
<consumer id="4">i</consumer>
<consumer id="5">j</consumer>
<consumer id="5">k</consumer>
<consumer id="5">m</consumer>
</serviceConfig>

mit xsl-version 1.0

Wenn ich unten xsl verwende

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<serviceConfig>
<xsl:for-each select="//consumer/cn">
<consumer>
<xsl:attribute name="id"><xsl:value-of select = "//consumer/@id"/></xsl:attribute>
<xsl:value-of select = "."/>
</consumer>
</xsl:for-each>
</serviceConfig>
</xsl:template>
</xsl:stylesheet>

Alle meine IDs werden vom ersten Vorkommen zurückgegeben. Sie benötigen jedoch die entsprechende ID für dieses Element

<serviceConfig>
<consumer id="1">A</consumer>
<consumer id="1">B</consumer>
<consumer id="1">C</consumer>
<consumer id="1">D</consumer>
<consumer id="1">E</consumer>
<consumer id="1">F</consumer>
<consumer id="1">G</consumer>
<consumer id="1">H</consumer>
<consumer id="1">I</consumer>
<consumer id="1">J</consumer>
<consumer id="1">K</consumer>
<consumer id="1">M</consumer>
</serviceConfig>


Lösung des Problems

Bitte versuchen Sie das folgende XSLT.

Es verwendet ein sogenanntes Identitätstransformationsmuster.

Geben Sie XML ein

<?xml version="1.0" encoding="UTF-8"?>
<serviceConfig>
<consumer id="1">
<cn>A</cn>
<cn>B</cn>
<cn>C</cn>
</consumer>
<consumer id="2">
<cn>D</cn>
<cn>E</cn>
</consumer>
<consumer id="3">
<cn>F</cn>
</consumer>
<consumer id="4">
<cn>G</cn>
<cn>H</cn>
<cn>I</cn>
</consumer>
<consumer id="5">
<cn>J</cn>
<cn>K</cn>
<cn>M</cn>
</consumer>
</serviceConfig>

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="consumer">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="cn">
<consumer id="{../@id}">
<xsl:value-of select="."/>
</consumer>
</xsl:template>
</xsl:stylesheet>

Ausgabe

<?xml version='1.0' encoding='UTF-8'?>
<serviceConfig>
<consumer id="1">A</consumer>
<consumer id="1">B</consumer>
<consumer id="1">C</consumer>
<consumer id="2">D</consumer>
<consumer id="2">E</consumer>
<consumer id="3">F</consumer>
<consumer id="4">G</consumer>
<consumer id="4">H</consumer>
<consumer id="4">I</consumer>
<consumer id="5">J</consumer>
<consumer id="5">K</consumer>
<consumer id="5">M</consumer>
</serviceConfig>

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...