2016-01-08 138 views
0

我在網上搜索了一個解決方案,但沒有找到一個。我甚至不確定這是可能的還是導致此行爲的原因。我正嘗試將節點內容複製到其他節點。它沒有問題,但在第一個節點中是一個標籤(xliff:g),只有標籤文本元素被複制。將帶有標記的筆記內容複製到節點

我錯過了什麼,或者爲什麼在所有這個標籤不被複制?

這是我輸入的xml:

<?xml version="1.0"?> 
<texts xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> 
<?xml-stylesheet href="hello.xsl" type="text/xsl"?> 
    <strings> 
    <string name="cpu"> 
     <en>example1</en> 
     <de name="cpu">"something <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> something1</de> 
     <es>""</es> 
    </string> 
    <string name="gpu"> 
     <en>example2</en> 
     <de name="gpu">something2<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g></de> 
     <es>""</es> 
    </string> 
    <string name="mainboard"> 
     <en>example3</en> 
     <de><xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g></de> 
     <es>""</es> 
    </string> 
</strings> 
</texts> 

我的XSL轉換XML:

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

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

    <xsl:template match="strings/string/es/text()"> 
    <xsl:value-of select="../../de"/> 
    </xsl:template> 

</xsl:stylesheet> 

而且其中只有XLIFF的文本價值的出口:G標籤被複制:

<texts xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"><?xml-stylesheet href="hello.xsl" type="text/xsl"?> 
    <strings> 
     <string name="cpu"> 
     <en>example1</en> 
     <de name="cpu">"something <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> something1</de> 
     <es>"something %1$s something1</es> 
     </string> 
     <string name="gpu"> 
     <en>example2</en> 
     <de name="gpu">something2<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> 
     </de> 
     <es>something2%1$s</es> 
     </string> 
     <string name="mainboard"> 
     <en>example3</en> 
     <de> 
      <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> 
     </de> 
     <es>%1$s</es> 
     </string> 
    </strings> 
</texts> 

期望的輸出將如下所示:

<texts xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"><?xml-stylesheet href="hello.xsl" type="text/xsl"?> 
    <strings> 
     <string name="cpu"> 
     <en>example1</en> 
     <de name="cpu">"something <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> something1</de> 
     <es>"something <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> something1</es> 
     </string> 
     <string name="gpu"> 
     <en>example2</en> 
     <de name="gpu">something2<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> 
     </de> 
     <es>something2<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g></es> 
     </string> 
     <string name="mainboard"> 
     <en>example3</en> 
     <de> 
      <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> 
     </de> 
     <es><xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g></es> 
     </string> 
    </strings> 
</texts> 

也許有人可以幫我弄清楚我做錯了什麼,或者爲什麼轉換的行爲像這樣。

提前感謝 卡利

+0

http://stackoverflow.com/help/someone-answers –

回答

1

<xsl:value-of select="../../de"/>創建了第一個選擇的節點的字符串值的文本節點,如果要複製節點使用<xsl:copy-of select="../../de"/>,或者你可能想<xsl:copy-of select="../../de/*"/>的子元素複製( s)的de元素。

1

相反的:

<xsl:value-of select="../../de"/> 

使用:

<xsl:copy-of select="../../de/node()"/> 
相關問題