Проблема с получением XSLT значений из тегов с префиксами пространства имен

Используйте пакет временных рядов . В пакете xts есть функции, специально предназначенные для этого. Или посмотрите на функции агрегата и rollapply в пакете zoo.

В книге rmetrics есть полезное обсуждение, в том числе сравнение производительности различных пакетов: https://www.rmetrics.org/files/freepdf/TimeSeriesFAQ.pdf

Изменить : Посмотрите на мой ответ на этот вопрос . В основном вам нужно усечь каждую временную метку в определенный интервал, а затем выполнить агрегацию с использованием этих новых усеченных временных меток в качестве вашего вектора группировки.

1
задан Nabs 26 July 2010 в 12:23
поделиться

1 ответ

Я не уверен, что вы поняли, что и ваши входные данные, и XSLT недействительны, всегда лучше предоставлять рабочие примеры.

В любом случае, если мы посмотрим на выражение XPath n:BasicDescription/n:RelatedMaterial/t:ContentProperties/t:ContentAttributes/t:Width, вы используете префикс n, который отображается на urn:t:myfoo:2010, но когда данные фактически находятся в пространстве имен по умолчанию. То же самое касается префикса t, который вообще не определен ни в исходных данных, ни в XSLT.

Вам нужно определить пространства имен "с обеих сторон", в XML-данных и в XSLT-преобразовании, и они должны быть одинаковыми, не префиксы, а URI.

Возможно, кто-то другой сможет объяснить это лучше меня.

Я исправил ваш пример и добавил несколько вещей, чтобы это работало.

Вход:

<?xml version="1.0" encoding="UTF-8"?>
<Description 
  xmlns="urn:t:myfoo:2010" 
  xmlns:t="something...">
  <Information>
    <GroupInformation xml:lang="en">
      <BasicDescription>
        <RelatedMaterial>
          <SomeText>Hello</SomeText>
          <t:ContentProperties>
            <t:ContentAttributes>
              <t:Width>555</t:Width>
              <t:Height>444</t:Height>
            </t:ContentAttributes>
          </t:ContentProperties>
        </RelatedMaterial>
      </BasicDescription>
    </GroupInformation>
  </Information>
</Description>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" 
  xmlns:n="urn:t:myfoo:2010" 
  xmlns:t="something...">

  <xsl:template match="/">
    <xsl:apply-templates select="n:Description/n:Information/n:GroupInformation"/>
  </xsl:template>

  <xsl:template match="n:GroupInformation">
    <xsl:element name="width">
      <xsl:value-of select="n:BasicDescription/n:RelatedMaterial/t:ContentProperties/t:ContentAttributes/t:Width"/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<width>555</width>
2
ответ дан 2 September 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: