2010-11-12 2 views
3

Я только начал возиться с XML, и у меня есть вопрос.Основной вопрос относительно соответствия шаблону XSL

XML файла:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="style.xsl"?> 
<bucket version="Root Version 1A2B3C"> 
</bucket> 

XSL FILE

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="bucket"> 
    <html> 
     <body> 
     <h3> 
      <xsl:value-of select="@version"/> 
     </h3> 
     </body> 
    </html> 
    </xsl:template> 
</xsl:stylesheet> 

У меня есть вопросы, касающиеся третьей линии XSL. Если я использую

<xsl:template match="bucket"> - Root Version 1A2B3C распечатывается

<xsl:template match="/"> -

ничего не напечатано, - я думал, что "/" означает корень. Я понимаю, что он должен либо распечатать "1,0" (<?xml version) или "Root Version 1A2B3C" (bucket version)

Пожалуйста, дайте мне знать, почему он не работает.

Благодаря

+0

Хороший вопрос, +1. См. Мой ответ для объяснения. –

+0

Если вы любопытство, то я бы добавил еще один аспект. Часть '

ответ

2

/ обозначает документ-узел() - это весь документ.

В представленном XML элемент bucket является верхним элементом документа. Это не корневой узел.

В верхнем элементе bucket все еще могут быть братья и сестры, такие как инструкции по обработке или узлы комментариев. Верхний элемент вместе со своими братьями и сестрами имеет один родительский элемент, и это / - корневой узел документа.

2

От http://www.w3.org/TR/xpath/#root-node

Корневой узел - это корень дерева. Корневой узел не встречается, кроме как корень дерева. Узел элемента для элемента документа является дочерним элементом корневого узла. Корневой узел также имеет в качестве инструкции для обработки детей и узлов для обработки инструкций и комментариев, которые происходят в прологе и после окончания элемента документа .

Всегда помните, что (из http://www.w3.org/TR/xpath/#section-Introduction):

XPath оперирует абстрактной, логической структуры документа XML, , а не его синтаксиса поверхности.

Таким образом, корень документа / означает «логический» корень всего документа.

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