2016-04-19 1 views
0

У меня есть XSL вроде этого:Как работает совпадение в шаблоне xsl?

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
       version="1.0"> 

    <xsl:template match="wsdl:definitions"> 
     <!-- code here --> 
    </xsl:template> 

</xsl:stylesheet> 

в этом XSL, что делает эта линия сделать:

<xsl:template match="wsdl:definitions"> 

от моего понимания его будет строго соответствовать wsdl:definitions метки, которые, как это в xml (исправьте меня, если я ошибаюсь здесь).

Но я буквально перепутал момент, я даю этот входной XML:

<xxx:definitions xmlns:xxx="http://schemas.xmlsoap.org/wsdl/" xmlns:xxxx1="http://www.w3.org/2006/05/addressing/wsdl" > 
</xxx:definitions> 

он по-прежнему соответствует <xxx:definitions> и делает трансформацию по мере необходимости. Как это возможно, учитывая, что в моем листе xsl я дал ему соответствие wsdl:definitions? Является ли совпадение чем-то связанным с xmlns данных ввода xml?

ответ

1

Префикс пространства имен - это просто имя для URI. Если URI соответствуют пространствам имен, то они идентичны. xmlns добавляет префикс к URI. В одном документе может быть даже много префиксов для одного и того же пространства имен.

Таким образом, вам разрешено использовать любые префиксы, которые вы хотите использовать для пространств имен, и XSL всегда будет их правильно соответствовать. Это поможет с документами, происходящими из разных источников, которые не должны использовать одни и те же префиксы и все еще пониматься.

+0

Так как URI 'http: // schemas.xmlsoap.org/wsdl /' совпадает в обоих документах, он работает, правильно? Это не имеет никакого отношения к 'match', правильно? –

+0

@ Муравей Да. Поскольку оба имеют префикс для этого URI, совпадение будет считать их равными. –

+0

Большое спасибо, сейчас чувствуйте! –

 Смежные вопросы

  • Нет связанных вопросов^_^