2014-07-18 81 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

相关问题