簡體   English   中英

從名稱空間前綴節點中刪除xmlns屬性

[英]remove xmlns attribute from namespace prefix node

我正在嘗試使用XSLT創建Edge Side Includes html塊。

這是XSLT示例

<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:esi="http://www.edge-delivery.org/esi/1.0" 
                exclude-result-prefixes="xsl esi">

    <xsl:output method="html" 
                media-type="text/html" 
                version="1.0" 
                encoding="UTF-8" 
                indent="no" 
                omit-xml-declaration="yes"/>

    <xsl:template match="/">
        <esi:vars>
            <xsl:text>some text goes here</xsl:text>
        </esi:vars>
    </xsl:template>

</xsl:stylesheet>

雖然轉換本身是可行的,但輸出是這樣的:

<esi:vars xmlns:esi="http://www.edge-delivery.org/esi/1.0">some text goes here</esi:vars>

問題是,xmlns:esi屬性嚴重破壞了ESI執行。 如果我手動刪除該屬性(例如:打開HTML並將其刪除,然后再次保存代碼塊),則一切正常。

問題:如何從HTML輸出中刪除xmlns:esi? 我嘗試將它包含在“排除結果前綴”中,但沒有用。

將工作的示例輸出:

<esi:vars>some text goes here</esi:vars>

問題:如何從HTML輸出中刪除xmlns:esi? 我嘗試將它包含在“排除結果前綴”中,但沒有用。

帶有輸出方法xml的XSLT無法產生格式不正確的XML。

當手動刪除名稱空間聲明時, "esi:"前綴將不與任何名稱空間綁定,因此整個文檔的格式將不正確。

根據ESI規范,通常必須在文檔的頂部元素( <html> )中聲明esi命名空間

試試這個

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:esi="http://www.edge-delivery.org/esi/1.0">
<xsl:output indent="no" omit-xml-declaration="yes"/>

<xsl:template match="/">
   <html xmlns:esi="http://www.edge-delivery.org/esi/1.0">
    <esi:vars>
        <xsl:text>some text goes here</xsl:text>
    </esi:vars>
    </html>
</xsl:template>

</xsl:stylesheet>

產生

<html xmlns:esi="http://www.edge-delivery.org/esi/1.0">
    <esi:vars>some text goes here</esi:vars>
</html>

使用任何輸入,此樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
    <xsl:text>&lt;esi:vars></xsl:text>
        <xsl:text>some text goes here</xsl:text>
    <xsl:text>&lt;/esi:vars></xsl:text>
</xsl:template>

</xsl:stylesheet>

結果:

<esi:vars>some text goes here</esi:vars>

注意 :對於格式不正確的輸出,您只能使用DOE或TEXT序列化。

我找到了專業的方法。 正確的答案取決於以下幾點:

<xsl:stylesheet
  version="1.0" xmlns:asp="remove"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:app="http://myNamespace.com/app" 
  exclude-result-prefixes="app">

在此使用此功能排除前綴

 exclude-result-prefixes 

有關更多信息: http : //msdn.microsoft.com/zh-cn/library/ms256204.aspx

暫無
暫無

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

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