Как я проверяю, существует ли тег в XSLT?

несколько проблем:

  1. ваш URI - « http: // hostname: 50070 / webhdfs / v1 / user / hive / warehouse », а ваш strDirectoryPath = "/ user / hive / warehouse "- поэтому ваш дубликат пути будет" http: // hostname: 50070 / webhdfs / v1 / user / hive / warehouse / user / hive / warehouse ", который не существует [ 112]
  2. ваш пользователь "myuser" может не иметь прав доступа к / user / hive / warehouse - проверьте его разрешения с помощью "hdfs dfs -ls / user / hive / warehouse"
  3. (просто проверяет) 'hostname' в URI - только для вопроса, а не в реальном коде, верно? вам понадобится имя хоста / ip песочницы

9
задан brian d foy 12 October 2008 в 12:16
поделиться

2 ответа

<xsl:if test="one">
  <h2>one</h2>
  <xsl:apply-templates select="one"/>
</xsl:if>
<!-- etc -->

С другой стороны, Вы могли создать именованный шаблон,

<xsl:template name="WriteWithHeader">
   <xsl:param name="header"/>
   <xsl:param name="data"/>
   <xsl:if test="$data">
      <h2><xsl:value-of select="$header"/></h2>
      <xsl:apply-templates select="$data"/>
   </xsl:if>
</xsl:template>

и затем звоните как:

  <xsl:call-template name="WriteWithHeader">
    <xsl:with-param name="header" select="'one'"/>
    <xsl:with-param name="data" select="one"/>
  </xsl:call-template>

Но честно говоря, который похож на большее количество работы мне... только полезный, если рисование заголовка сложно... для простого <h2>...</h2> Я испытал бы желание оставить это встроенным.

Если заголовок заголовка всегда является именем узла, Вы могли simplifiy шаблон путем удаления аргумента "$header", и использовать вместо этого:

<xsl:value-of select="name($header[1])"/>
15
ответ дан 4 December 2019 в 12:22
поделиться

Мне нравится осуществлять функциональные аспекты XSL, которые приводят меня к следующей реализации:

<?xml version="1.0" encoding="UTF-8"?>

<!-- test data inlined -->
<test>
    <one>Content 1</one>
    <two>Content 2</two>
    <three>Content 3</three>
    <four/>
    <special>I'm special!</special>
</test>

<!-- any root since take test content from stylesheet -->
<xsl:template match="/">
    <html>
        <head>
            <title>Header/Content Widget</title>
        </head>
        <body>
            <xsl:apply-templates select="document('')//test/*" mode="header-content-widget"/>
        </body>
    </html>
</xsl:template>

<!-- default action for header-content -widget is apply header then content views -->
<xsl:template match="*" mode="header-content-widget">
    <xsl:apply-templates select="." mode="header-view"/>
    <xsl:apply-templates select="." mode="content-view"/>
</xsl:template>

<!-- default header-view places element name in <h2> tag -->
<xsl:template match="*" mode="header-view">
    <h2><xsl:value-of select="name()"/></h2>
</xsl:template>

<!-- default header-view when no text content is no-op -->
<xsl:template match="*[not(text())]" mode="header-view"/>

<!-- default content-view is to apply-templates -->
<xsl:template match="*" mode="content-view">
    <xsl:apply-templates/>
</xsl:template>

<!-- special content handling -->
<xsl:template match="special" mode="content-view">
    <strong><xsl:apply-templates/></strong>
</xsl:template>

Однажды в теле все элементы, содержавшиеся в тестовом элементе, имеют примененный довольный виджет заголовка (в порядке документа).

Шаблон довольного виджета заголовка по умолчанию (соответствие "*") сначала применяется, представление заголовка затем применяет довольное представление к элементу тока.

Шаблон представления заголовка по умолчанию помещает имя элемента тока в тег h2. Довольное представление по умолчанию применяет универсальные правила обработки.

Когда нет никакого содержания, как оценено по [не (текст ())] предикат, никакой вывод для элемента не происходит.

Один от особых случаев легко обрабатываются.

2
ответ дан 4 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

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