Необходимо удалить тег, если значение в поле равно Null - PullRequest
0 голосов
/ 14 февраля 2019

Я преобразовал свой XML-файл, используя следующий XSLT-файл:

<xsl:stylesheet version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">

  <catalog><xsl:for-each select="catalog/cd">
  <cd>
    <title><xsl:value-of select="title"/></title>
    <artist><xsl:value-of select="artist"/></artist>
    <country><xsl:value-of select="country"/></country>
    <company><xsl:value-of select="company"/></company>
    <price><xsl:value-of select="price"/></price>
    <years>
       <year><xsl:value-of select="year-1"/></year>
       <year><xsl:value-of select="year-2"/></year>
       <year><xsl:value-of select="year-3"/></year>          
    </years>
  </cd>
  </xsl:for-each></catalog>

</xsl:template>
</xsl:stylesheet>

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

<catalog><cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<years>
<year>1985</year>
<year>1986</year>
<year>1987</year>
</years>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<years>
<year>1988</year>
<year>1989</year>
<year></year>
</years>
</cd>

Я не хотел бы выводить TAG

<year></year>

Если поля отдельных полей год-1, год-2 или год-3 равны нулю

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

<xsl:template match="*[not(string(.))]" />

Вы также можете использовать его.

0 голосов
/ 14 февраля 2019

Все, что вам нужно сделать, это проверить, что поле не пусто, например xsl:if, перед тем, как создать узел и выбрать значение.

<xsl:stylesheet version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">

        <catalog>
            <xsl:for-each select="catalog/cd">
                <cd>
                    <title>
                        <xsl:value-of select="title"/>
                    </title>
                    <artist>
                        <xsl:value-of select="artist"/>
                    </artist>
                    <country>
                        <xsl:value-of select="country"/>
                    </country>
                    <company>
                        <xsl:value-of select="company"/>
                    </company>
                    <price>
                        <xsl:value-of select="price"/>
                    </price>
                    <years>
                        <xsl:if test="year-1!=''">
                            <year>
                                <xsl:value-of select="year-1"/>
                            </year>
                        </xsl:if>
                        <xsl:if test="year-2!=''">
                            <year>
                                <xsl:value-of select="year-2"/>
                            </year>
                        </xsl:if>
                        <xsl:if test="year-3!=''">
                            <year>
                                <xsl:value-of select="year-3"/>
                            </year>
                        </xsl:if>
                    </years>
                </cd>
            </xsl:for-each>
        </catalog>

    </xsl:template>
</xsl:stylesheet>

С вводом

<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year-1>1985</year-1>
    <year-2>1986</year-2>
    <year-3>1987</year-3>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year-1>1988</year-1>
    <year-2>1989</year-2>
    <year-3></year-3>
  </cd>
</catalog>

Производит продукцию

<?xml version="1.0" encoding="utf-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <years>
      <year>1985</year>
      <year>1986</year>
      <year>1987</year>
    </years>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <years>
      <year>1988</year>
      <year>1989</year>
    </years>
  </cd>
</catalog>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...