2017-09-14 79 views
0

我正在使用XSLT1.0將某些XML轉換爲另一個XML。只需要做一些內容處理。XSL轉換註釋

輸入XML有一些評論,這是在一個擴展的特性實體形式。我需要它使它像一個正常的評論。

輸入是如下,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">

<concept id="test">
<title>Test title</title>
<conbody>&lt;!-- test comments--&gt;

<p>test paragraph &lt;!-- comments in p --&gt;</p>

</conbody>
</concept>

所需輸出註釋應該是這樣的下方,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">

<concept id="test">
<title>Test title</title>
<conbody><!-- test comments-->

<p>test paragraph <!-- comments in p --></p>

</conbody>
</concept>

的評論真的應該來像上面。但我不確定是否可以在XSLT中執行此操作。

有人可以幫忙嗎?

+0

的代碼是 的 ' – Gpn008

+0

那麼你知道'test'元素總是包含這樣的註釋嗎? –

回答

0

- 響應編輯,以澄清 -

也許它可能是這樣簡單:

XSLT 1.0

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

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

<xsl:template match="text()"> 
    <xsl:value-of select="." disable-output-escaping="yes"/> 
</xsl:template> 

</xsl:stylesheet> 

這是假設你的處理鏈的載體DOE。

它也假設你的XML不帶有其他不應該轉義的轉義標記。如果這不是一個安全的假設,然後使用:

<xsl:template match="text()" name="unescape-comments"> 
    <xsl:param name="text" select="."/> 
    <xsl:choose> 
     <xsl:when test="contains($text, '&lt;!--')"> 
      <xsl:value-of select="substring-before($text, '&lt;!--')"/> 
      <xsl:comment> 
       <xsl:value-of select="substring-before(substring-after($text, '&lt;!--'), '--&gt;')"/> 
      </xsl:comment> 
      <xsl:call-template name="unescape-comments"> 
       <xsl:with-param name="text" select="substring-after($text, '--&gt;')"/> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$text"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
+0

謝謝你的回答。但實際上評論可能來自任何元素的任何地方。此外,父元素可以包含一些其他平面文本或甚至子元素。所以Xslt的主要目的是保持相同的內容來處理評論。輸入XML是由一個使註釋無效的腳本生成的。嘗試使用XSLT使XML有效。 – Gpn008

+0

請編輯您的問題,並顯示一個**代表**輸入和預期輸出的例子。 –

+0

修改了樣本輸入和預期輸出的問題 – Gpn008