XSLT: сценарий дубликата Слияния

a img является встроенным замененным элементом , в отличие от span, например, когда это встроенный незаменяемый элемент , и мы можем определить ширину / высоту заменяемого элемента. Вот соответствующая часть спецификации, которая определяет, как должна вести себя высота / ширина

https://www.w3.org/TR/CSS2/visudet.html#inline-replaced-width [116 ]

https://www.w3.org/TR/CSS2/visudet.html#inline-replaced-height

Когда дело доходит до не -Заменены элементы, вы найдете это:

Свойство 'width' не применяется. ref sup>

Свойство height не применяется. ref sup>

blockquote>

Та же логика применима к преобразованию, где мы можем применить преобразование к img, а не к span.

Связанные: https://stackoverflow.com/a/54227332/8620333


https://developer.mozilla.org/en -US / docs / Web / CSS / Replaced_element

https://html.spec.whatwg.org/multipage/rendering.html#replaced-elements

Обратите внимание, что в спецификации также сказано, что замененный элемент встроенного блока точно такой же, как и замененный встроенный элемент, поэтому создание img inline или inline-block не будет иметь значения. [ 1124]

6
задан jelovirt 17 March 2009 в 12:19
поделиться

1 ответ

Следующее преобразование XSLT 1.0 приводит к правильному результату:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes" />

  <xsl:key name="contract" match="ContractInfo" use="@ContractNo" />
  <xsl:key name="filedata" match="Filedata" use="../../@ContractNo" />

  <xsl:template match="ContractInfo">
    <xsl:if test="generate-id() = 
                  generate-id(key('contract', @ContractNo)[1])">
      <xsl:copy>
        <xsl:apply-templates select="key('contract', @ContractNo)/Details | @*" />
      </xsl:copy>
    </xsl:if>
  </xsl:template>

  <xsl:template match="Details">
    <xsl:if test="generate-id(..) = 
                  generate-id(key('contract', ../@ContractNo)[1])">
      <xsl:copy>
        <xsl:apply-templates select="key('filedata', ../@ContractNo) | @*" />
      </xsl:copy>
    </xsl:if>
  </xsl:template>

  <!-- copy everything else (root node, Filedata nodes and @attributes) -->
  <xsl:template match="* | @*">
    <xsl:copy>
      <xsl:apply-templates select="* | @*" />
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Отметьте использование <xsl:key> в сочетании с generate-id() определить первый узел набора узлов соответствия, эффективно собирая в группу равные узлы.

Можно вызвать заказанный результат при помощи <xsl:sort> в <xsl:apply-templates>. Я не включал это ради ясности.

Мой тестовый вывод:

<root>
  <ContractInfo ContractNo="12345">
    <Details LastName="Goodchild">
      <Filedata FileName="File1"></Filedata>
      <Filedata FileName="File2"></Filedata>
    </Details>
  </ContractInfo>
  <ContractInfo ContractNo="123456">
    <Details LastName="Goodchild">
      <Filedata FileName="File2"></Filedata>
    </Details>
  </ContractInfo>
</root>
7
ответ дан 17 December 2019 в 00:15
поделиться
Другие вопросы по тегам:

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