我希望通过以下示例从w3schools http://www.w3schools.com/xml/xml_xsl.asp开始使用XSLT显示XML文档。打开XML文档时,XSLT转换为HTML将在浏览器中完成。
现在,我有困难a)获取本地名称和2)在两个单独的表达式中获取QName类型的属性内容的命名空间。
示例
<service xmlns:ns3="http://www.mycompany.com/" name="ns3:PersonService">
<serviceInterface name="ns3:PersonServiceInterface">
<operation>...</operation>
</serviceInterface>
问题
<xsl:value-of select="@name"/>
返回 ns3:PersonService ,但我不想要名称空间前缀。答案 0 :(得分:2)
1.什么XPATH表达式将PersonService作为属性名称的内容返回?
假设service
是顶级元素的子级(您没有提供完整且格式良好的XML文档),请使用:
substring-after(/*/service/@name, ':')
2.什么XPATH表达式将http://www.mycompany.com/作为属性名称的名称空间返回?
在与上述相同的假设下,使用:
/*/service/namespace::*[name() = substring-before(../@name, ':')]
基于XSLT的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:value-of select="substring-after(/*/service/@name, ':')"/>
============
<xsl:value-of select=
"/*/service/namespace::*[name() = substring-before(../@name, ':')]"/>
</xsl:template>
</xsl:stylesheet>
此XSLT转换,应用于以下XML文档(提供的,但已完成):
<t>
<service xmlns:ns3="http://www.mycompany.com/"
name="ns3:PersonService">
<serviceInterface name="ns3:PersonServiceInterface">
<operation>...</operation>
</serviceInterface>
</service>
</t>
评估两个XPath表达式并将这些评估的结果复制到输出中:
PersonService
============
http://www.mycompany.com/