Попытка узнать XSL, я не могу понять это прямо в голове. Скажем, я хочу создать XSLT-шаблон, который обрабатывает узлы на основе их значения. Давайте сделаем ситуацию пример:Разница между пустым узлом и узлом с 0 значением
<data>
<item1>0</item1>
<item2></item2>
<!--Multiple similar nodes below-->
</data>
Давайте попробуем отметить пустые с xsi:nil="true"
, оставив при этом нулевые те быть:
<xsl:template match="node()[starts-with(name(), 'item')]">
<xsl:copy>
<xsl:if test="not(node()) and not(.!='')"><!--This is the problem-->
<xsl:attribute name="xsi:nil">true</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
Это действительно делает именно то, что я хочу, чтобы это сделать, но это код монстра Франкенштейна, который я еще не совсем понял.
Теперь, экспериментируя, исследуя StackOverflow и пытается понять это, я обнаружил, что not(node())
можно определить как пустые и нулевое значение узлов, а также .!=0
, но .!=''
кажется, предназначаться только нулевые узлы значений, которые Безразлично» Для меня смысл.
Мне кажется, что строковые значения могут быть квалифицированы как нулевое значение или нулевые значения как пустые значения строки, но я не могу понять это.
В принципе, вопрос как я могу отличить пустой узел от узла с нулевым значением?
Обнаружили ошибку в примере XSL-кода, она работает сейчас, как и предполагалось, но характер вопроса остается тем же. – twinchenzo
"* Я выяснил, что not (node ()) может определять как пустые, так и нулевые узлы значений *« Я так не думаю. –
Вы абсолютно правы, я был в замешательстве, потому что мой код был неисправен и не дал результатов, которые я ожидал. Спасибо, что указали! – twinchenzo