2013-07-18 2 views
1

У меня есть файл XML с макетом, как это:Преобразование XML с вложенными атрибутами с помощью XSLT

<root> 
    <node> 
     <descriptors> 
      <attribute attr="important"/> 
     </descriptors> 
     <value> 
      Some 
     </value> 
     <value> 
      text 
     </value> 
     <value> 
      here. 
     </value> 
    <node> 
</root> 

Есть много узлов и каждый из них отличаются от элементов в descriptors элементе. Мне нужно, чтобы извлечь текст, так что я бы это:

<element> 
    Sometexthere. 
</element> 

У меня есть преобразование XSL:

<xsl:template match="//attribute[@attr='important']"> 
    <element> 
     <xsl:for-each select="../../value"> 
      <xsl:value-of select="." /> 
     </xsl:for-each> 
    </element> 
</xsl:template> 

Это вместо того, чтобы просто записывает все value элементы в каждом node элемента в файле. Я думаю, что я действительно не понимаю, как работает область действия (например, когда . указывает на текущий элемент/узел, но каков текущий элемент/узел в цикле).

Как мне подойти к этому?

EDIT

Мой фактический XSL таблицы стилей (я преобразуя файл DOCX):

<xsl:template match="/"> 
     <order> 
      <xsl:apply-templates/> 
     </order> 
    </xsl:template> 
    <xsl:template match="/w:document/w:body/w:p[w:pPr/w:pStyle/@w:val='Pealkiri1']"> 
     <name> 
      <xsl:for-each select="w:t"> 
       <xsl:value-of select="." /> 
      </xsl:for-each> 
     </name> 
    </xsl:template> 

ответ

2

Вы можете попробовать согласования node элемент, который содержит descriptors/attribute/@attr=... вместо самой attribute элемента.

Контекст for-each был бы относительно этого node.

<xsl:template match="/"> 
    <order> 
     <xsl:apply-templates select="//node[descriptors/attribute/@attr='important']" /> 
    </order> 
</xsl:template> 

<xsl:template match="node"> 
    <element> 
     <xsl:for-each select="value"> 
      <xsl:value-of select="." /> 
     </xsl:for-each> 
    </element> 
</xsl:template> 
+0

Это дает тот же результат, но не содержит тег ''. Так что теперь это только текст. Довольно странно. – j0ntech

+0

Можете ли вы опубликовать остальную часть своей таблицы стилей? Я предполагаю, что вам не хватает '' или испортить ''. –

+0

У меня есть шаблон, соответствующий '/', но это просто окружает текст моим собственным корневым элементом ('order'). – j0ntech