具有特定节点的匹配元素存在问题。
xml:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" herf="B1.xsl"?>
<profile xmlns:base = "urn:mytest:baseInfo"
xmlns:prf="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#">
<base:Description>
<base:text>description of profile</base:text>
</base:Description>
<prf:Component>
<prf:Keyboard>PhoneKeyPad</prf:Keyboard>
<prf:Model>SampleModel</prf:Model>
<prf:NumberOfSoftKeys>3</prf:NumberOfSoftKeys>
<prf:PixelAspectRatio>1x1</prf:PixelAspectRatio>
<prf:ScreenSize>128x240</prf:ScreenSize>
</prf:Component>
</profile>
并且XSLT是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:base = "urn:mytest:baseInfo" xmlns:prf="http://www.openmobilealliance.org/tech/profiles/UAPROF/ccppschema-20021212#">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="prf:*">
<xsl:variable name="temp">
<xsl:value-of select="local-name(.)"/>
</xsl:variable>
<xsl:element name="{$temp}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
结果是:
<?xml version="1.0" encoding="UTF-8"?>description of profile<Component>
<Keyboard>PhoneKeyPad</Keyboard>
<Model>SampleModel</Model>
<NumberOfSoftKeys>3</NumberOfSoftKeys>
<PixelAspectRatio>1x1</PixelAspectRatio>
<ScreenSize>128x240</ScreenSize>
</Component>
为什么还会输出“个人资料描述”?它有“基础”命名空间。
提前致谢。
答案 0 :(得分:3)
简单的答案是:因为你永远不会告诉XSLT处理器忽略它。
您提供了一个处理prf:*
的模板,但您并未禁止base:
的处理。除此之外,XSLT处理器将默认行为(built-in rules,还有here)应用于它遇到的任何未由任何自定义模板处理的节点。
元素节点的默认行为是:
了解到,您的<base:Description>
和<base:Text>
元素完全符合您的要求。要防止它,请使用空模板捕获它们:
<xsl:template match="base:*" />
或通过为根节点定义模板来手动指导程序流:
<xsl:template match="/">
<xsl:apply-templates select="profile/prf:Component" />
</xsl:template>