命名空间错xsl:template找不到匹配项

时间:2012-09-02 17:41:30

标签: xml xslt namespaces match

我对这个问题感到很惭愧,但我找不到解决办法,希望你能帮助我。

这是我的代码xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="C:/Program%20Files/XML%20Copy%20Editor/esercizi%20xml/prova2.xsl"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
    <fileDesc>
        <titleStmt>
            <title></title>
        </titleStmt>
        <publicationStmt><p>AA</p></publicationStmt>
        <sourceDesc><p>AA</p></sourceDesc>
    </fileDesc>
</teiHeader>
    <text>
    <body><div>
    <head>Titolo</head>
        <p>Scriver&#242; un <rs>nome</rs> di luogo come questo:  <rs key="Persia" type="luogo">Persia</rs>.</p>
    </div></body>
    </text>
</TEI>

这就是我在我的文件xsl中写的:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://www.w3.org/1999/xhtml" version="1.0">  
    <xsl:template match="/">  
        <back>
            <div>
               <xsl:value-of select="//rs"/>
            </div>
        </back>     
    </xsl:template>
</xsl:stylesheet>

输出结果为:

<?xml version="1.0" encoding="UTF-8"?>
<back xmlns="http://www.w3.org/1999/xhtml" xmlns:tei="http://www.tei-c.org/ns/1.0">
  <div/>
</back>

我不明白我的错误在哪里;我想它在namespace,但我找不到解决方案。

谢谢你的建议!

1 个答案:

答案 0 :(得分:0)

        <div> 
           <xsl:value-of select="//rs"/> 
        </div> 

“select”属性中的表达式尝试选择“no namespace”中的任何rs元素,并且没有这样的元素 - 没有选择任何内容。

你真的想要

        <div> 
           <xsl:value-of select="//tei:rs"/> 
        </div> 

但是,在XSLT 1.0中,只输出第一个选定的rs元素。

如果你想要所有这些,请使用类似

的内容
        <div> 
          <xsl:for-each select="//tei:rs">
           <p><xsl:value-of select="."/></p>
          </xsl:for-each> 
        </div>