powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / обработка элементов xml
5 сообщений из 5, страница 1 из 1
обработка элементов xml
    #38452722
Alexey_Ab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть xml
<Data>
<FinData>
<AAA Element1="123" Element2="456" Element3="789" ....>
<BBB Element4="123" Element5="456" Element3="" ....>
...
<ZZZ Element6="123" Element7="456" Element3="" ....>
</FinData>
</Data>

Нужно получить
<Data>
<FinData>
<AAA Element1="123" Element2="456" Element3="789" ....>
<BBB Element4="123" Element5="456" Element3="0" ....>
...
<ZZZ Element6="123" Element7="456" Element3="0" ....>
</FinData>
</Data>

Т.е. во всем xml документе нужно найти пустые Element3 и записать значение 0. Не пустые Element3 оставить как есть.

Подскажите над реализацией.

Следующие варианты не работают:
1.
<xsl:template name="FinData">
<xsl:element name="FinData">
<xsl:copy-of select="/Data/FinData/@*" />
<xsl:copy-of select="/Data/FinData/*" />
<xsl:for-each select="FinData//*[@Element3='']">
<xsl:attribute name="Element3">
<xsl:value-of select="0" />
</xsl:attribute>
</xsl:for-each>
</xsl:element>
</xsl:template>

2.
<xsl:template name="FinData">
<xsl:element name="FinData">
<xsl:copy-of select="/Data/FinData/@*" />
<xsl:copy-of select="/Data/FinData/*" />
<xsl:for-each select="FinData//@Element3[.='']">
<xsl:call-template name="Element3" />
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template name="Element3">
<xsl:attribute name="Element3">
<xsl:value-of select="0" />
</xsl:attribute>
</xsl:template>

В этом случае возникает ошибка: An attribute node (Element3) cannot be created after the children of the containing element
...
Рейтинг: 0 / 0
обработка элементов xml
    #38452835
Alexey_Ab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать, исходный xml файл очень большой и "сложный", поэтому обработка каждого элемента по отдельности проблематично. Есть ли другие варианты?
...
Рейтинг: 0 / 0
обработка элементов xml
    #38453065
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey_Ab,

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <xsl:copy>
      <xsl:apply-templates select="*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@Element3[. = '']">
    <xsl:attribute name="Element3">0</xsl:attribute>
  </xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
обработка элементов xml
    #38453193
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один шаблон лишний. Можно так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@Element3[. = '']">
    <xsl:attribute name="Element3">0</xsl:attribute>
  </xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
обработка элементов xml
    #38454838
Alexey_Ab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Класс!
Благодарю!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / обработка элементов xml
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]