繁体   English   中英

<xsl:copy-of>不保留 XML 标签</xsl:copy-of>

[英]<xsl:copy-of> does not preserve XML tags

使用Saxon HE 11.4 ,我试图简单地复制一些文本并在该文本中保留 XML 标签。 这个答案和许多其他答案告诉我,只需使用<xsl:copy-of>就足够了。 但它在我的情况下不起作用, <xsl:copy-of>删除所有 XML 标签。 为什么?

输入 XML

<?xml version="1.0" encoding="utf-8"?>
<root>
   <card>
      <k>а</k>
      <body>
         <meaning>
            <trn>возглас удивления</trn>
            <trn>вопрос с оттенком удивления или неудовольствия</trn>            
         </meaning>
      </body>
   </card>
</root>

XSLT 档案

<?xml version="1.0"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:character-map name="escape-square-brackets">
    <xsl:output-character character="[" string="\["/>
    <xsl:output-character character="]" string="\]"/>
  </xsl:character-map>
  
  <xsl:output method="text" encoding="utf-16le" byte-order-mark="yes"/>
  <xsl:strip-space elements="*"/>
  
  <xsl:template match="/root">
    <xsl:result-document href="/Users/xinatanil/Desktop/compiling stuff/abbyy_udahin_kg_ru.dsl" method="text">
      <xsl:text>#NAME "Кыргызско-русский словарь"</xsl:text>
      <xsl:text>&#xa;</xsl:text>
      <xsl:text>#INDEX_LANGUAGE "Russian"</xsl:text>
      <xsl:text>&#xa;</xsl:text>
      <xsl:text>#CONTENTS_LANGUAGE "Russian"</xsl:text>
      <xsl:text>&#xa;</xsl:text>
      <xsl:text>&#xa;</xsl:text>
      
      <root>
        <xsl:for-each select="card">
          <xsl:value-of select="k"/>
          <xsl:text>&#xa;</xsl:text>
          
          <xsl:for-each select="body/meaning/*">
            <xsl:text> </xsl:text>            
            <xsl:copy-of select="node()"/>
            <xsl:text>&#xa;</xsl:text>            
          </xsl:for-each>
          
          <xsl:text>&#xa;</xsl:text>
        </xsl:for-each>
      </root>
    </xsl:result-document>
  </xsl:template>
  
</xsl:stylesheet>

预计 output

#NAME "Кыргызско-русский словарь"
#INDEX_LANGUAGE "Russian"
#CONTENTS_LANGUAGE "Russian"
а
 <trn>возглас удивления</trn>
 <trn>вопрос с оттенком удивления или неудовольствия</trn>            

我目前得到的 Output

#NAME "Кыргызско-русский словарь"
#INDEX_LANGUAGE "Russian"
#CONTENTS_LANGUAGE "Russian"

а
 возглас удивления
 вопрос с оттенком удивления или неудовольствия

您已将text用作xsl:output method ,这样您就不会获得元素节点的副本,而只会获得文本节点。 因此,如果您的目标格式是 XML 而不是纯文本,请使用例如<xsl:output method="xml"/>

首先将主要的 output 方法更改为 xml 并将其从xsl:result-document元素中删除。

接下来,如果你想复制已经选择的元素,它们是meaning的孩子,你需要改变:

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

到:

<xsl:copy-of select="."/>

否则,您将复制这些元素的子节点。

你可能想删除root包装器。

并且您还需要抑制 XML 声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM