您可以使用以下构造:
*:ElementLocalName[namespace-uri()='http://namespace.tld']
如果您使用 XSLT2,您可以像这样在架构顶部附近声明一个变量:
<sch:let name="my6namespaces" value="('http://ns1.com', 'http://ns2.com', 'http://ns3.org', 'http://ns4.com, 'http://ns5.net', 'http://ns6.com')"/>
然后你可以在你的规则中使用它:
<pattern>
<rule context="*:para[namespace-uri()=$my6namespaces] | *:para-text[namespace-uri()=$my6namespaces] | *:block[namespace-uri()=$my6namespaces] | *:quote-para[namespace-uri()=$my6namespaces] | *:source-para[namespace-uri()=$my6namespaces] | *:note-para[namespace-uri()=$my6namespaces]" role="warning">
<report test="text()[contains(.,'www.')]">URLs should be marked up with a url tag</report>
</rule>
</pattern>
如果它不会对性能造成太大影响,您可以像这样缩短规则上下文:
<pattern>
<rule context="*[local-name()=('para', 'para-text', 'block', 'quote-para', 'source-para', 'note-para') and namespace-uri()=$my6namespaces]" role="warning">
<report test="text()[contains(.,'www.')]">URLs should be marked up with a url tag</report>
</rule>
</pattern>
请注意,只要其中一个元素具有“www”,您当前编写的规则就会生成成功报告。在里面。我认为您可能打算将其写为assert 而不是report,在这种情况下,只要其中一个元素没有具有“www. "在里面。