我是xslt和xpath的初级用户。在命令行(Ubuntu 14.04)上使用带有xml文件的xpath可以正常工作,但xslt文件中的xpath不会返回任何内容。我正在使用Juniper Junos xml文件。有什么建议? 谢谢, 乔治
xml文件以:
开头<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/12.3R8/junos">
<interface-information xmlns="http://xml.juniper.net/junos/12.3R8/junos-interface" junos:style="normal">
<physical-interface>
<name>fe-0/1/0</name>
<logical-interface>
<name>fe-0/1/0.0</name>
...
在Ubuntu 14.04中运行的命令行是:
xpath -e "/rpc-reply/interface-information/physical-interface/logical-interface/name" interfaces.xml
xslt文件是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Interfaces</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Name</th>
</tr>
<xsl:for-each select="/rpc-reply/interface-information/physical-interface/logical-interface">
<tr>
<td><xsl:value-of select="name"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:3)
这里的问题非常简单。您没有在XPath中使用名称空间。显然你的命令行实用程序并不关心,或者根据元素'QNames 评估XPath忽略默认命名空间,并对名称空间进行其他一些非标准处理。
解决方案:
在样式表的顶部声明前缀:
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nbase="urn:ietf:params:xml:ns:netconf:base:1.0"
xmlns:junosi="http://xml.juniper.net/junos/12.3R8/junos-interface"
>
在XPath中使用这些前缀:
<xsl:for-each select="/nbase:rpc-reply/junosi:interface-information
/junosi:physical-interface/junosi:logical-interface">
<tr>
<td><xsl:value-of select="junosi:name"/></td>
</tr>
</xsl:for-each>