• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Копирование в переменную элемента xml

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
256
xsl очистки ns для первого случая:
Код:
Const xsl_ns=_
|<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
 
  <xsl:template match="*">
	<xsl:element name="{local-name(.)}">|&_
	  {<xsl:apply-templates select="@* | node()"/>}&_
|	</xsl:element>
  </xsl:template>
  <xsl:template match="@*">
	<xsl:attribute name="{local-name(.)}">
	  <xsl:value-of select="."/>
	</xsl:attribute>
  </xsl:template>
</xsl:stylesheet>|
код агента поменяется на MsgBox Transform(Transform(xml,xsl),xsl_ns)
[DOUBLEPOST=1432221291,1432221197][/DOUBLEPOST]второй случай не лечится - ибо нет рутовой ноды
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
256
рекурсивный вариант XSLT
XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xx="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xs xx">
<xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="xx:RootElement1">
<xsl:apply-templates select="xx:Element3"/>
</xsl:template>
<xsl:template match="xx:Element3">
<!--<xsl:copy-of select="."/>-->
<xsl:call-template name="create">
<xsl:with-param name="el" select="."/>
</xsl:call-template>
<!--<xsl:copy-of xmlns="xx" select="*"/>-->
</xsl:template>
<xsl:template name="create">
<xsl:param name="el"/>
<xsl:element name="{local-name($el)}">
<xsl:for-each select="$el/@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:for-each select="$el/child::node()">
<xsl:call-template name="create">
<xsl:with-param name="el" select="."/>
</xsl:call-template>
</xsl:for-each>
<xsl:value-of select="$el/text()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
 
Последнее редактирование модератором:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
256
но мну такой вариант не нра - правильнее будет убирать ns изначально
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 949
609
BIT
256
есть "валидный" метод (с моей тз)
XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:xx="http://www.w3.org/1999/xhtml"
	exclude-result-prefixes="xx xs">
	<xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes"/>
	<xsl:template match="xx:RootElement1">
		<xsl:apply-templates select="xx:Element3/child::node()"/>
	</xsl:template>
	<xsl:template match="*">
		<xsl:element name="{local-name()}">
			<xsl:apply-templates select="@* | node()" />
		</xsl:element>
	</xsl:template>
	<xsl:template match="@*">
		<xsl:attribute name="{local-name()}">
			<xsl:value-of select="." />
		</xsl:attribute>
	</xsl:template>
	<xsl:template match="text() | comment() | processing-instruction()">
		<xsl:copy />
	</xsl:template>
</xsl:stylesheet>
НО мы вынуждены будем получить верхний тег (htmlx)
[DOUBLEPOST=1432311864,1432311701][/DOUBLEPOST]<xsl:apply-templates select="xx:Element3/child::node()"/> - это если без Element3 тега (как бы оставляем его текст, если есть, и выносим на уровень выше)
вместе с тегом - <xsl:apply-templates select="xx:Element3" />
[DOUBLEPOST=1432311915][/DOUBLEPOST]результат
XML:
<htmlx>
		node text
		<E4 attr2="2">44444<E4sub>4sub</E4sub>
   </E4>
		
   <E5>5555</E5>
	
</htmlx>
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!