powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Убрать namespace при копировании
3 сообщений из 3, страница 1 из 1
Убрать namespace при копировании
    #37539394
vunder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Входные данные
Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.1" xsi:noNamespaceSchemaLocation="..\..\my.xsd">
<tag1>
  <tag2> 0298055 - 9 </tag2>

Нужно получить
Код: plaintext
1.
2.
<root Version="1">
<tag1>
  <tag2> 0298055 - 9 </tag2>

Пытаюсь делать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8"/>
  
  <xsl:template match="*|@*">
    <xsl:choose>
      <xsl:when test="name(self::node()) = 'root'">
        <root Version="1">
          <xsl:apply-templates select="*"/>
        </root>
      </xsl:when>
      <xsl:otherwise>
          <xsl:copy>
            <xsl:apply-templates select="*|@*|comment()|processing-instruction()|text()"/>
          </xsl:copy>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

Однако получаю, что все тэги второго уровня имеют атрибут xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance".
Код: plaintext
1.
2.
3.
4.
5.
6.
<root Version="1">
  <tag1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <tag2>valueM/tag2>
  </tag1>
  <tag11 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
Как от него избавиться?
...
Рейтинг: 0 / 0
Убрать namespace при копировании
    #37539838
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vunder,

совсем убрать - только сторонней программкой.
чтобы он не сильно мешал, можно его у рутовой ноды прописать, тогда дети не будут его указывать.
...
Рейтинг: 0 / 0
Убрать namespace при копировании
    #37552164
denisov72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8"/>
  
  <xsl:template match="/">
      <root Version="1">
        <xsl:for-each select="./*">
          <xsl:call-template name="copy-subtree-without-namespace" />
        </xsl:for-each>             
      </root>      
  </xsl:template>

  <xsl:template name="copy-subtree-without-namespace" 
                     match="*" 
                     mode="copy-subtree-without-namespace">
    <xsl:element name="{local-name(.)}">
      <xsl:for-each select="@*">
        <xsl:attribute name="{local-name(.)}">
          <xsl:value-of select="."/>
        </xsl:attribute>
      </xsl:for-each>
      <xsl:apply-templates mode="copy-subtree-without-namespace"/>
    </xsl:element>    
  </xsl:template>  
</xsl:stylesheet>
, но тут есть нюансы с текстовыми узлами
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Убрать namespace при копировании
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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