簡體   English   中英

如何將屬性添加到XML CDATA標簽?

[英]how can I add attribute to a XML CDATA Tags?

XML:

<?xml version="1.0" encoding="UTF-9" ?>
<mailAndMessageSettings>
    <settings>
        <add key="Url" value=""/>
        <add key="UserName" value=""/>
        <add key="Password" value=""/>
    </settings>
    <mail>
        <subject>
            Mp3 Submission
        </subject>
        <body>
            <![CDATA[
                <meta http-equiv="Content-Type" content="text/html; charset="utf-8""/>
                <head></head>

                <body>
                <p>Hi,</p>

                <p>Please find the attached mp3... :-)</p>

                <p><a href="mymp3.mp33">here</a></p>

                <p>Regards,</br>
                Pete</p>

                </body>
                </html> 
            ]]>
        </body>
    </mail>    
</mailAndMessageSettings>

XSLT:

 <xsl:template match="/">
 <xsl:value-of select="/mailAndMessageSettings/mail" disable-output-escaping="yes"/>
 </xsl:template>

預期產量:

 <mail>
            <subject>
                Mp3 Submission
            </subject>
            <body>
                <![CDATA[
                    <meta http-equiv="Content-Type" content="text/html; charset="utf-8""/>
                    <head></head>

                    <body>
                    <p>Hi,</p>

                    <p>Please find the attached mp3... :-)</p>

                    <p><a href="mymp3.mp3" onclick="myfunction();">here</a></p>

                    <p>Regards,</br>
                    Pete</p>

                    </body>
                    </html> 
                ]]>
            </body>
        </mail>    

我想在CDATA中的“這里”上添加屬性“ onclick”並獲取整個“郵件”節點嗎? 真的有可能嗎? 有人可以幫我這個忙嗎? 提前致謝。 您的幫助將不勝感激:)

CDATA節內沒有節點或標簽。 CDATA的意思是“字符數據”。 將內容放入CDATA的唯一原因是說“此處的內容可能看起來像標記,但我不希望將其視為標記;僅將其視為文本”。 因此,如果您要將其視為標記,請不要將其放入CDATA中。

您必須采用字符串操作,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="body[contains(.,'>here&lt;/a>')]">
    <xsl:value-of disable-output-escaping="yes" select="concat(
        '&lt;![CDATA[',
        substring-before(.,'>here&lt;/a>'),
        ' onclick=&quot;myfunction();&quot;>here&lt;/a>',
        substring-after(.,'>here&lt;/a>'),
        ']]>'
      )"/>
  </xsl:template>
</xsl:stylesheet>

但是,為什么郵件正文必須首先是CDATA是有原因的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM