我试图在 xsl 中选择 xhtml 文档中的所有链接。一些 anchor 标记具有命名空间声明 xmlns="http://www.w3.org/1999/xhtml"
在他们之中。这些没有被选中。例如使用此 xml 文档:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl"?>
<root>
<item>
this iz sum text and it haz sum <a xmlns="http://www.w3.org/1999/xhtml" href="http://cheezburger.com/">linx</a> in it.
Teh linx haz piks of <a href="http://icanhascheezburger.com/">kittehs</a> in dem.
</item>
</root>
和这个 xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<dl>
<xsl:for-each select="//root/item/a">
<dd><xsl:value-of select="."/></dd>
<dt><xsl:value-of select="@href"/></dt>
</xsl:for-each>
</dl>
</html>
</xsl:template>
</xsl:stylesheet>
仅选择了第二个链接。有人可以解释这里发生了什么以及我如何解决它?
最佳答案
如果您需要位于不同命名空间中的两个节点,请使用:
/root/item/*[local-name() = 'a']
但是,这种情况很少发生,通常,您只需要一个命名空间中的节点:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:example="http://www.w3.org/1999/xhtml"
>
....
<xsl:for-each select="/root/item/example:a">
关于xml - 选择一个带有 xmlns 的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858843/