【问题标题】:Copy note content with tag to node将带有标签的笔记内容复制到节点
【发布时间】:2016-01-08 14:02:50
【问题描述】:

我在互联网上搜索了解决方案,但没有找到。我什至不确定这是否可能或导致这种行为的原因。我正在尝试将节点内容复制到另一个节点。它没有问题,但是在第一个节点中是一个标签(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>

也许有人可以帮助我弄清楚我做错了什么,或者为什么转换会这样。

非常感谢提前 卡利

【问题讨论】:

标签: xml xslt xliff


【解决方案1】:

代替:

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

使用:

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

【讨论】:

    【解决方案2】:

    &lt;xsl:value-of select="../../de"/&gt; 使用第一个选定节点的字符串值创建一个文本节点,如果要复制节点,请使用 &lt;xsl:copy-of select="../../de"/&gt;,或者您可能希望 &lt;xsl:copy-of select="../../de/*"/&gt; 复制 @ 的子元素987654324@元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多