xslt. Loop with recursion
xml на входе:
<root>
<child>
<name>Jon</name>
<age>10</age>
</child>
<child>
<name>Bob</name>
<age>10</age>
</child>
<child>
<name>Michael</name>
<age>10</age>
</child>
</root>
xslt-трансформация:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<xsl:apply-templates select="//child">
</xsl:apply-templates></body>
</html>
</xsl:template>
<xsl:template match="child">
<xsl:value-of select="./name">
<xsl:call-template name="dots">
<xsl:with-param name="count" select="80 - string-length(./name) - string-length(./age)">
</xsl:with-param></xsl:call-template>
<xsl:value-of select="./age">
</xsl:value-of></xsl:value-of></xsl:template>
<xsl:template name="dots">
<xsl:param name="count" select="1">
<xsl:if test="$count > 0">
<xsl:text>_</xsl:text>
<xsl:call-template name="dots">
<xsl:with-param name="count" select="$count - 1">
</xsl:with-param></xsl:call-template>
</xsl:if>
</xsl:param></xsl:template>
</xsl:stylesheet>
<root>
<child>
<name>Jon</name>
<age>10</age>
</child>
<child>
<name>Bob</name>
<age>10</age>
</child>
<child>
<name>Michael</name>
<age>10</age>
</child>
</root>
xslt-трансформация:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<xsl:apply-templates select="//child">
</xsl:apply-templates></body>
</html>
</xsl:template>
<xsl:template match="child">
<xsl:value-of select="./name">
<xsl:call-template name="dots">
<xsl:with-param name="count" select="80 - string-length(./name) - string-length(./age)">
</xsl:with-param></xsl:call-template>
<xsl:value-of select="./age">
</xsl:value-of></xsl:value-of></xsl:template>
<xsl:template name="dots">
<xsl:param name="count" select="1">
<xsl:if test="$count > 0">
<xsl:text>_</xsl:text>
<xsl:call-template name="dots">
<xsl:with-param name="count" select="$count - 1">
</xsl:with-param></xsl:call-template>
</xsl:if>
</xsl:param></xsl:template>
</xsl:stylesheet>
Oracle. Sql functions to update xml date
updateXML - замена xml узлов
insertChildXML - вставка дочерних xml элементов или аттрибутов в определенный элемент
insertXMLbefore - вставка XML узлов любого вида непосредственно перед данным узлом (кроме узла атрибута)
appendChildXML - вставка XML узлов любого вида непосредственно в конец данного узла
deleteXML - удаление xml узлов
Очередное разочерование в oracle: нужно было пройтись по xml дабы произвести вставки текстовых данных в пустые теги.
select updateXML(xmltype('<root><node></node></root>'), '/root/node/text()', 'Some message') from dual
output: <root><node/></root>
И что получаю на выходе? Ничего. Оказывается в данном случае предлагается только замена пустого элемента таким же элементом, но уже со вставленными текстовыми данными.
select updateXML(xmltype('<root><node></node></root>'), '/root/node', xmltype('<node>Some message</node>')) from dual
output: <root><node>Some message</node></root>
insertChildXML - вставка дочерних xml элементов или аттрибутов в определенный элемент
insertXMLbefore - вставка XML узлов любого вида непосредственно перед данным узлом (кроме узла атрибута)
appendChildXML - вставка XML узлов любого вида непосредственно в конец данного узла
deleteXML - удаление xml узлов
Очередное разочерование в oracle: нужно было пройтись по xml дабы произвести вставки текстовых данных в пустые теги.
select updateXML(xmltype('<root><node></node></root>'), '/root/node/text()', 'Some message') from dual
output: <root><node/></root>
И что получаю на выходе? Ничего. Оказывается в данном случае предлагается только замена пустого элемента таким же элементом, но уже со вставленными текстовыми данными.
select updateXML(xmltype('<root><node></node></root>'), '/root/node', xmltype('<node>Some message</node>')) from dual
output: <root><node>Some message</node></root>
Subscribe to:
Posts
(
Atom
)