2014-09-16 2 views
0

Я экспортирую данные столбчатой ​​диаграммы из SSRS в формате XML и большую часть времени он отлично смотрится, но в некоторых случаях он получает/SeriesX/CategoryX/nodes. Когда .net читает эти данные в datatable, dat получает разделение на три связанные таблицы; Series0, Category0 и Value.Соответствие шаблону XSLT - Удаление предков

Мне нужно удалить/SeriesX/CategoryX/из этого:

<My_Location_Chart> 
    <Series0> 
     <Category0> 
     <Value Y="0.1111" /> 
     </Category0> 
    </Series0> 
    <Series1> 
     <Category0> 
     <Value Y="0.2222" /> 
     </Category0> 
    </Series1> 
    <Series2> 
     <Category0> 
     <Value Y="0.3333" /> 
     </Category0> 
    </Series2> 
    </My_Location_Chart> 

Так это выглядит следующим образом:

<My_Location_Chart> 
     <Value Y="0.1111" /> 
     <Value Y="0.2222" /> 
     <Value Y="0.3333" /> 
    </My_Location_Chart> 

Есть другие схемы, которые используют значение SeriesX и я не хочу чтобы ввернуть их вверх, но ни один из них не соответствует шаблону/SeriesX/CategoryX /, поэтому я хочу только совместить этот шаблон.

Я попытался удалить узлы категории. Это близко, но не совсем то, что мне нужно:

<xsl:template match="@*|node()" > 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="*[not(descendant-or-self::*[text()[normalize-space()] | @*])]"/> 


    <xsl:template match="rep:Category0" > 
    <xsl:apply-templates select="*" /> 
    </xsl:template> 

выше создает это:

<My_Location_Chart> 
    <Series0> 
     <Value Y="0.1111" /> 
    </Series0> 
    <Series1> 
     <Value Y="0.2222" /> 
    </Series1> 
    <Series2> 
     <Value Y="0.3333" /> 
    </Series2> 
    </My_Location_Chart> 

Любые предложения приветствуются. Я новичок в XSLT, чтобы легко обойтись. Благодаря!

ответ

0

Как насчет чего-то простого?

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/My_Location_Chart"> 
    <xsl:copy> 
     <xsl:copy-of select="*/Category0/Value"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

Обратите внимание, что это не изменит «0.711590296495957» в «0.813084112149533», как показано в вашем примере.

+0

Мне нравится простой. Я очистил значения элементов для ясности. Как новичок я читаю это и, кажется, имеет смысл, но он не меняет результат вообще. Я не могу понять, почему, потому что это выглядит хорошо для меня. My_Location_Chart находится под другими деревьями, так что технически это/Report/My_Location_Chart /, но это должно быть хорошо ... – BClaydon

+0

"* My_Location_Chart находится под другими деревьями *" Тогда это не может работать так, как есть, потому что предполагается, что 'My_Location_Chart' является корневым элементом , Попробуйте изменить '' to '' или ''. Если он все еще не работает, отправьте репрезентативную выборку вашего ввода. –

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