2015-09-16 70 views
0

我很困惑,爲什麼resource標籤仍然存在於<body>之內,因爲我認爲ltx:resource的默認模板應該讓它出現。XSLT默認模板不會讓一個元素消失

我有XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<?latexml RelaxNGSchema="LaTeXML"?> 
<document xmlns="http://dlmf.nist.gov/LaTeXML" xmlns:stex="http://kwarc.info/ns/sTeX" xml:id="Document"> 
<resource src="LaTeXML.css" type="text/css"/> 
<resource src="ltx-article.css" type="text/css"/> 
<para class="theory" xml:id="p1" fragid="p1"> 
    <block class="definition" xml:id="foo" fragid="foo"> 
    <p xml:id="foo.p1" about="#foo.p1" stex:srcref="/Users/yuancalvin/lmh/localmh/ext/sTeX/htmltest/test.tex#textrange(from=9;0,to=11;16)" fragid="foo.p1"> 
    testing 
    </p> 
    </block> 
</para> 
</document> 

負責建設作爲XSL的部分如下:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet 
    version  = "1.0" 
    xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" 
    xmlns:ltx = "http://dlmf.nist.gov/LaTeXML" 
    xmlns:string= "http://exslt.org/strings" 
    xmlns:f  = "http://dlmf.nist.gov/LaTeXML/functions" 
    exclude-result-prefixes = "ltx f" 
    extension-element-prefixes="string f"> 

<xsl:template match="/" mode="head-resources"> 
    <xsl:apply-templates select="//ltx:resource[@type='text/css'] 
           | //ltx:resource[@type='text/javascript']" mode="inhead"/> 
    </xsl:template> 

    <!-- By default, these disappear --> 
    <xsl:template match="ltx:resource"/> 

    <xsl:template match="ltx:resource[@type='text/css' and @src]" mode="inhead"> 
    <xsl:text>&#x0A;</xsl:text> 
    <xsl:element name="link" namespace="{$html_ns}"> 
     <xsl:attribute name="rel">stylesheet</xsl:attribute> 
     <xsl:attribute name="href"><xsl:value-of select="f:url(@src)"/></xsl:attribute> 
     <xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute> 
     <xsl:if test="@media"> 
     <xsl:attribute name="media"><xsl:value-of select="@media"/></xsl:attribute> 
     </xsl:if> 
    </xsl:element> 
    </xsl:template> 


    <xsl:template match="/" mode="body-main-begin"/> 
    <xsl:template match="/" mode="body-main-end"/> 

    <xsl:template match="/" mode="body-content"> 
    <xsl:text>&#x0A;</xsl:text> 
    <xsl:element name="div" namespace="{$html_ns}"> 
     <xsl:attribute name="class">ltx_page_content</xsl:attribute> 
     <xsl:apply-templates select="." mode="body-content-begin"/> 
     <xsl:apply-templates/> 
     <xsl:apply-templates select="." mode="body-content-end"/> 
     <xsl:text>&#x0A;</xsl:text> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="/" mode="body-content-begin"/> 
    <xsl:template match="/" mode="body-content-end"/> 
</xsl:stylesheet> 

樣式表是仍然不完全與實際一個相當長,但應該足以進行錯誤檢查。

<?xml version="1.0"?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title/> 

<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/> 
<link rel="stylesheet" href="LaTeXML.css" type="text/css"/> 
<link rel="stylesheet" href="ltx-article.css" type="text/css"/> 
</head> 
<body> 
<div class="ltx_page_main"> 
<div class="ltx_page_content"> 
    <resource xmlns="http://dlmf.nist.gov/LaTeXML" src="LaTeXML.css" type="text/css"/> 
    <resource xmlns="http://dlmf.nist.gov/LaTeXML" src="ltx-article.css" type="text/css"/> 
    <para xmlns="http://dlmf.nist.gov/LaTeXML" class="theory" xml:id="p1"> 

    <block class="definition" xml:id="foo"> 
     <p xmlns:stex="http://kwarc.info/ns/sTeX" xml:id="foo.p1" about="#foo.p1" stex:srcref="/Users/yuancalvin/lmh/localmh/ext/sTeX/htmltest/test.tex#textrange(from=9;0,to=11;16)"> 
testing </p> 
    </block> 
    </para> 


</div> 
<div class="ltx_page_footer"> 
<div class="ltx_page_logo">Generated by <a href="http://dlmf.nist.gov/LaTeXML/">LaTeXML <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wKExQZLWTEaOUAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAdpJREFUKM9tkL+L2nAARz9fPZNCKFapUn8kyI0e4iRHSR1Kb8ng0lJw6FYHFwv2LwhOpcWxTjeUunYqOmqd6hEoRDhtDWdA8ApRYsSUCDHNt5ul13vz4w0vWCgUnnEc975arX6ORqN3VqtVZbfbTQC4uEHANM3jSqXymFI6yWazP2KxWAXAL9zCUa1Wy2tXVxheKA9YNoR8Pt+aTqe4FVVVvz05O6MBhqUIBGk8Hn8HAOVy+T+XLJfLS4ZhTiRJgqIoVBRFIoric47jPnmeB1mW/9rr9ZpSSn3Lsmir1fJZlqWlUonKsvwWwD8ymc/nXwVBeLjf7xEKhdBut9Hr9WgmkyGEkJwsy5eHG5vN5g0AKIoCAEgkEkin0wQAfN9/cXPdheu6P33fBwB4ngcAcByHJpPJl+fn54mD3Gg0NrquXxeLRQAAwzAYj8cwTZPwPH9/sVg8PXweDAauqqr2cDjEer1GJBLBZDJBs9mE4zjwfZ85lAGg2+06hmGgXq+j3+/DsixYlgVN03a9Xu8jgCNCyIegIAgx13Vfd7vdu+FweG8YRkjXdWy329+dTgeSJD3ieZ7RNO0VAXAPwDEAO5VKndi2fWrb9jWl9Esul6PZbDY9Go1OZ7PZ9z/lyuD3OozU2wAAAABJRU5ErkJggg==" alt="[LOGO]"/></a></div></div> 
</div> 
</body> 
</html> 

我真的不知道爲什麼資源標籤仍然存在於正文中。任何幫助將不勝感激:)

+1

「*樣式表是仍然不完全與實際一個相當長,但應該夠了錯誤檢查*。」不,這不是 - 因爲它不會產生所要求的結果(實際上,它由於未聲明的變量只會產生一個錯誤)。請查看:http://stackoverflow.com/help/mcve –

+0

Angerhang,在StackOverflow上,標記一個問題已經解決了,_do不要用「[resolved]」_編輯它的標題,只需點擊對號(你做了,謝謝) 。我會恢復你的標題改變。 – Abel

+0

感謝您的糾正:) – angerhang

回答

1

您沒有顯示正在複製節點的部分,因此當前寫入,如果匹配失敗,則輸出將是該節點的文本值。

你的代碼有這樣的:

<!-- By default, these disappear --> 
<xsl:template match="ltx:resource"/> 

是你做節目的一部分,顯示模式inheadxsl:apply-templates,但「刪除模板」並不在該模式下存在的。因此它永遠不會被匹配。

您需要在您希望應用的每種模式下添加刪除模板。如果您使用的是XSLT 2.0(目前標記爲XSLT 1.0),則可以使用<xsl:template match="X" mode="#all" />語法,但不幸的是,在XSLT 1.0中,您不能單獨爲每種模式指定此語法。

說明書says it so

還爲每個模式,這允許遞歸處理以通過一個明確的模板規則中在不存在成功的模式匹配的相同方式繼續一個內置的模板規則在樣式表中。此模板規則適用於元素節點和根節點。以下顯示的是模式m的內置模板規則的等效值。

<xsl:template match="*|/" mode="m"> 
    <xsl:apply-templates mode="m"/> 
</xsl:template> 
+0

阿哈非常感謝。這最終解決了問題! – angerhang