Установка узла vale для конкретной строки, когда он равен нулю или пуст, с помощью XSLT 1.0 - PullRequest
0 голосов
/ 03 июня 2019

У меня есть следующий входной XML:

 <?xml version="1.0" encoding="UTF-8"?>
    <GroupMainRequest>
       <GroupMainResults>
          <GroupNumber>GLEN01</GroupNumber>
          <divisions>
             <userProvidedEffDate>12/31/1998</userProvidedEffDate>
             <division>
                <GroupNumber>GLEN010001</GroupNumber>
                <GroupEffDt>01/01/2000</GroupEffDt>
                <GroupExpDt />
             </division>
             <division>
                <GroupNumber>GLEN010002</GroupNumber>
                <GroupEffDt>01/01/2000</GroupEffDt>
                <GroupExpDt />
             </division>
             <division>
                <GroupNumber>GLEN010003</GroupNumber>
                <GroupEffDt>01/01/2000</GroupEffDt>
                <GroupExpDt>12/31/2001</GroupExpDt>
             </division>
          </divisions>
       </GroupMainResults>
    </GroupMainRequest>

Мне нужно обновить значение узла <GroupExpDt> каждого <division> в <divisions> до 12/31/9999 всякий раз, когда значение узла пустоили ноль (я использую XSLT 1.0).

Окончательный вывод XML должен быть таким, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?>
    <GroupMainRequest>
       <GroupMainResults>
          <GroupNumber>GLEN01</GroupNumber>
          <divisions>
             <userProvidedEffDate>12/31/1998</userProvidedEffDate>
             <division>
                <GroupNumber>GLEN010001</GroupNumber>
                <GroupEffDt>01/01/2000</GroupEffDt>
                <GroupExpDt>12/31/9999</GroupExpDt>
             </division>
             <division>
                <GroupNumber>GLEN010002</GroupNumber>
                <GroupEffDt>01/01/2000</GroupEffDt>
                <GroupExpDt>12/31/9999</GroupExpDt>
             </division>
             <division>
                <GroupNumber>GLEN010003</GroupNumber>
                <GroupEffDt>01/01/2000</GroupEffDt>
                <GroupExpDt>12/31/2001</GroupExpDt>
             </division>
          </divisions>
       </GroupMainResults>
    </GroupMainRequest>

Любая помощь очень ценится.

1 Ответ

1 голос
/ 03 июня 2019

В связи с другим вопросом: Скопируйте все узлы с особыми случаями

Так что, пожалуйста, подтвердите его ответ;)

Немного преобразил свой код:

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

<!-- Identity template, provides default behavior that copies all content into the output -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<!-- More specific template for GroupExpDt that provides custom behavior -->
<!-- Documentation below code block -->
<xsl:template match="GroupExpDt[string-length(normalize-space(text())) = 0]">  
    <GroupExpDt>
        <xsl:text>12/31/9999</xsl:text>
    </GroupExpDt>
</xsl:template>
</xsl:stylesheet>

normalize-space () документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...