2014-07-18 77 views
-1

請建議訪問沒有任何名稱空間的元素。但是,我的代碼能夠訪問和更改具有名稱空間的節點(元素)。我正在使用XSLT2版本。查找我的XML(我用映射到我的本地路徑DTD路徑,請還建議爲訪問XML沒有DTD幫助XSLT:如何在同一篇文章中訪問既有名稱空間又沒有名稱空間的元素

輸入XML:

<!DOCTYPE article PUBLIC "-//ES//DTD journal article DTD version 5.2.0//EN//XML" "D:/DTDs/Els-parser/art520.dtd"> 
    <article> 
    <fm> 
     <ce:title>The title</ce:title> 
     <ce:author-group> 
      <ce:author><ce:surname>Rudramuni</ce:surname><ce:given-names>TP</ce:given-names></ce:author> 
     </ce:author-group> 
    </fm> 
    <body> 
     <ce:sections> 
      <ce:section> 
       <ce:section-title>The first Head</ce:section-title> 
       <ce:para>Tha first para</ce:para> 
      </ce:section> 
     </ce:sections> 
    </body> 
    <back> 
    <ref><ce:author>Vijay</ce:author></ref> 
    </back> 
</article> 

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:ce="http://www.elsevier.com/xml/common/dtd" 
      xmlns:sb="http://www.elsevier.com/xml/common/struct-bib/dtd" 
      xmlns:xlink="http://www.w3.org/1999/xlink" 
      xmlns:mml="http://www.w3.org/1998/Math/MathML" 
      version='2.0'> 
<xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
</xsl:template> 
<xsl:template match="fm"> 
    <xsl:element name="ce:front"><xsl:apply-templates/></xsl:element> 
</xsl:template> 
<xsl:template match="ce:author"> 
<xsl:element name="name"><xsl:apply-templates/></xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

要求的結果:

<?xml version="1.0" encoding="UTF-8"?> 
<article> 
    <ce:front> 
    <ce:title>The title</ce:title> 
     <ce:author-group><name><ce:surname>Rudramuni</ce:surname><ce:given-names>TP</ce:given-names></name></ce:author-group> 
    </ce:front> 
    <body><ce:sections><ce:section><ce:section-title>The first Head</ce:section-title><ce:para>Tha first para</ce:para></ce:section></ce:sections></body> 
    <back> 
    <ref><name>Vijay</name></ref> 
    </back> 
</article> 

但我得到一些額外的命名空間,如 「的xmlns =」 http://www.elsevier.com/xml/ja/dtd」和xmlns =「」,併爲view =「all」等元素找到了一些額外的屬性。提前致謝。請建議。

回答

1

你好像問了很多關於XSLT 2.0的問題最近,這是確定的課程,但請提問的時候笑納這些準則:

,我們可以重現您的問題
  • 使用有效的例子。在這個問題和其他問題中,你的例子不完整(例如在這個問題中缺少命名空間),這使得很難幫助你(他們會降低或關閉你的問題,見How to ask)。
  • 把這些例子調低至最低限度,否則人們不會跑來幫助你,因爲它太難理解所問的問題了。在這種情況下,兩行XML和XSLT將解釋您的問題。
  • 運行您在此處粘貼的代碼並複製您獲得的輸出(或錯誤)。例如,在這個問題中,輸出不是命名空間良好的形式,它不可能是任何XSLT處理器的輸出。

要回答你的問題,你可以使用通配符NameTest,這在任何命名空間中選擇該名稱:

​​
+0

非常感謝主席先生,你的建議。我會盡力遵守你的指導方針。 –

+0

使用您的代碼,現在我可以訪問命名空間和命名空間元素。感謝您的簡單代碼,並獲得完美結果。還有一個小小的疑問,是問更多的問題是不正確的? –

+1

@RudramuniTP:你可以提出更多的問題,這很好,只要你問它作爲單獨的問題(我的意思是,不要把多個問題放在一個問題上)。因此,繼續詢問所需的所有XSLT相關問題;)。也請閱讀(需要5分鐘):[問]。 – Abel

相關問題