为什么我不必为 XSLT 中的节点属性指定名称空间?
例如,假设我有一个如下所示的 XML:
<?xml version="1.0"?>
<timeline xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:xmlsn:axpz_namespace">
<A>
<B>
<C key="in"> bval <\C>
<C ind="ra"> bra <\C>
</B>
<\A>
我的xsl文件头是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:mms="urn:xmlsn:axpz_namespace">
C 的属性的 select 语句如下所示:
select="./mms:B/mms:C[@key='in']"/>
select="./mms:B/mms:C[@ind='ra']"/>
但似乎如果您必须指定它B
并且C
是 mms 命名空间的一部分,那么您应该必须指定它key
并且ind
也是该命名空间的一部分。IE
select="./mms:B/mms:C[@mms:key='in']"/>
select="./mms:B/mms:C[@mms:ind='ra']"/>
虽然很明显,如果您指定要在其中的节点命名空间,mms
那么它的属性也应该在其中,但如果您指定在命名空间内,那么它似乎也B
应该mms
在C
其中。
这可能是一个微不足道的问题,并且可能仅取决于所使用的 XSL 阅读器,但我之所以这么问,是因为它让我很好奇您是否可以在各种节点上混合命名空间。例如,类似:
select="./mms:B/othernamespace:C[@mms:key='in']"/>
我正在使用 Saxon8B 阅读器,我猜测这种语法可能取决于我使用的阅读器。