2017-04-26 8 views
0

나는이 있습니다XSLT는 - 유사한 다른에서 하나 개의 노드에서 누락 값을 기입 한

<?xml version="1.0" encoding="UTF-8"?> 
<xliffversion xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd"> 
    <file original="Target1/Localizable.strings" source-language="de" datatype="plaintext" target-language="en"> 
    <header> 
     <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="8.2.1" build-num="8C1002"/> 
    </header> 
    <body> 
     <trans-unit id="Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt."> 
     <source>Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt.</source> 
     <note>Humanized-Error: Validation of city</note> 
     </trans-unit> 
     <trans-unit id="Die Standorte konnten nicht geladen werden."> 
     <source>Die Standorte konnten nicht geladen werden.</source> 
     <note>Humanized-Error: MerchantMapServiceClient</note> 
     </trans-unit> 
     <trans-unit id="Die Straße muss angegeben werden."> 
     <source>Die Straße muss angegeben werden.</source> 
     <note>Humanized-Error: Validation of street</note> 
     </trans-unit> 
    </body> 
    </file> 
    <file original="Target2/Localizable.strings" source-language="de" datatype="plaintext" target-language="en"> 
    <header> 
     <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="8.2.1" build-num="8C1002"/> 
    </header> 
    <body> 
     <trans-unit id="Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt."> 
     <source>Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt.</source> 
     <target>City must contain at least 2 letters. Characters like ' and - are allowed.</target> 
     <note>Humanized-Error: Validation of city</note> 
     </trans-unit> 
     <trans-unit id="Die Straße muss angegeben werden."> 
     <source>Die Straße muss angegeben werden.</source> 
     <target>Street is a mandatory field.</target> 
     <note>Humanized-Error: Validation of street</note> 
     </trans-unit> 
    </body> 
    </file> 
    <file original="Target3/Localizable.strings" source-language="de" datatype="plaintext" target-language="en"> 
    <header> 
     <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="8.2.1" build-num="8C1002"/> 
    </header> 
    <body> 
     <trans-unit id="%@ - %@"> 
     <source>%[email protected] - %[email protected]</source> 
     <note>Transaktionen, Wochendatumsbereich, 2 parameter</note> 
     </trans-unit> 
     <trans-unit id="Die Standorte konnten nicht geladen werden."> 
     <source>Die Standorte konnten nicht geladen werden.</source> 
     <target>Could not load locations.</target> 
     <note>Humanized-Error: MerchantMapServiceClient</note> 
     </trans-unit> 
     <trans-unit id="%ix einlösebereit!"> 
     <source>%ix einlösebereit!</source> 
     <note>BonusProgramDetailView: points left info label shows how many times you can redeem your bonus</note> 
     </trans-unit> 
     <trans-unit id="Die Straße muss angegeben werden."> 
     <source>Die Straße muss angegeben werden.</source> 
     <target>Street is a mandatory field.</target> 
     <note>Humanized-Error: Validation of street</note> 
     </trans-unit> 
    </body> 
    </file> 
</xliffversion> 

을하고 난이 원하는 : 를 루프 :

<?xml version="1.0" encoding="UTF-8"?> 
<xliffversion xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd"> 
    <file original="Target1/Localizable.strings" source-language="de" datatype="plaintext" target-language="en"> 
    <header> 
     <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="8.2.1" build-num="8C1002"/> 
    </header> 
    <body> 
     <trans-unit id="Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt."> 
     <source>Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt.</source> 
     <target>City must contain at least 2 letters. Characters like ' and - are allowed.</target> 
     <note>Humanized-Error: Validation of city</note> 
     </trans-unit> 
     <trans-unit id="Die Standorte konnten nicht geladen werden."> 
     <source>Die Standorte konnten nicht geladen werden.</source> 
     <target>Could not load locations.</target> 
     <note>Humanized-Error: MerchantMapServiceClient</note> 
     </trans-unit> 
     <trans-unit id="Die Straße muss angegeben werden."> 
     <source>Die Straße muss angegeben werden.</source> 
     <target>Street is a mandatory field.</target> 
     <note>Humanized-Error: Validation of street</note> 
     </trans-unit> 
    </body> 
    </file> 
    <file original="Target2/Localizable.strings" source-language="de" datatype="plaintext" target-language="en"> 
    <header> 
     <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="8.2.1" build-num="8C1002"/> 
    </header> 
    <body> 
     <trans-unit id="Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt."> 
     <source>Die Stadt muss mindestens 2 Buchstaben aufweisen. Die Zeichen ' und - sind erlaubt.</source> 
     <target>City must contain at least 2 letters. Characters like ' and - are allowed.</target> 
     <note>Humanized-Error: Validation of city</note> 
     </trans-unit> 
     <trans-unit id="Die Straße muss angegeben werden."> 
     <source>Die Straße muss angegeben werden.</source> 
     <target>Street is a mandatory field.</target> 
     <note>Humanized-Error: Validation of street</note> 
     </trans-unit> 
    </body> 
    </file> 
    <file original="Target3/Localizable.strings" source-language="de" datatype="plaintext" target-language="en"> 
    <header> 
     <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="8.2.1" build-num="8C1002"/> 
    </header> 
    <body> 
     <trans-unit id="%@ - %@"> 
     <source>%[email protected] - %[email protected]</source> 
     <note>Transaktionen, Wochendatumsbereich, 2 parameter</note> 
     </trans-unit> 
     <trans-unit id="Die Standorte konnten nicht geladen werden."> 
     <source>Die Standorte konnten nicht geladen werden.</source> 
     <target>Could not load locations.</target> 
     <note>Humanized-Error: MerchantMapServiceClient</note> 
     </trans-unit> 
     <trans-unit id="%ix einlösebereit!"> 
     <source>%ix einlösebereit!</source> 
     <note>BonusProgramDetailView: points left info label shows how many times you can redeem your bonus</note> 
     </trans-unit> 
    </body> 
    </file> 
</xliffversion> 

XSL 변환은 다음과 같은 작업을 수행 할 필요가있다 노드가 모두 trans-unit 인 경우 노드에 <target> 노드가 있는지 확인하십시오. 그렇다면 괜찮습니다. 그렇지 않다면 다른 trans-unit 노드 (동일한 ID를 사용하지만 다른 <file> 노드 내에 있음)를 찾은 다음 <target> 노드 (있는 경우)를 누락 된 노드에 복사해야합니다. 어떻게 이것을 달성합니까?

+0

이 같은 더 이상의'트랜스 - unit' 요소가 될 수'id' 속성? 그렇다면'target '을 복사하기 위해 어느 것을 사용해야합니까? –

+0

예. 실제로 ''요소가있는 것을 사용해야합니다. (이상적으로는 요소의 내용이 'id'자체와 동일하지 않은 경우를 취해야합니다. - 현재로서는 그렇지 않지만 향후 어느 시점에서 발생할 수 있습니다. – gasparuff

답변

1

이 당신을 위해 작동 할 수 있습니다

<xsl:key name="myKey" match="trans-unit[target]" use="@id"/> 


    <xsl:template match="trans-unit[not(target)]"> 
    <xsl:variable name="id" select="@id"/> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"/> 
     <xsl:apply-templates select="source"/> 
     <!-- If there is more than one match, pick the first one. --> 
     <xsl:apply-templates select="key('myKey', $id)[1]/target"/> 
     <xsl:apply-templates select="note"/> 
    </xsl:copy> 
    </xsl:template> 


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