我在获取父标记及其子标记的所有属性时遇到了一些麻烦。 这是我的XML:
<macro name="editor">
<names variable="editor" delimiter=", ">
<name and="symbol" delimiter=", "/>
<label form="short" prefix=" (" text-case="lowercase" suffix=".)" />
</names>
</macro>
我希望能够从子节点获取所有属性。 我目前有:
<xsl:for-each select="macro">
<xsl:value-of select="@*" />
<br />
</xsl:for-each>
我希望如何:
编辑
名称编辑,
名称符号,
标签短(小写。)
答案 0 :(得分:1)
尝试此操作以获取所有变量名称和值:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="macro">
<xsl:for-each select="child::*//@*">
<xsl:value-of select="concat(name(), ' : ', .)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出:
variable : editor
delimiter : ,
and : symbol
delimiter : ,
form : short
prefix : (
text-case : lowercase
suffix : .)
答案 1 :(得分:1)
进行此XSLT转换时
<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="macro">
<xsl:value-of select="@name"/>
<xsl:for-each select="child::*">
<xsl:text disable-output-escaping="yes"> </xsl:text>
<xsl:value-of select="name(.)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@*" separator=""/>
<xsl:for-each select="child::*">
<xsl:text disable-output-escaping="yes"> </xsl:text>
<xsl:value-of select="name(.)"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@*" separator=""/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在XML下面运行:
<macro name="editor">
<names variable="editor" delimiter=", ">
<name and="symbol" delimiter=", "/>
<label form="short" prefix=" (" text-case="lowercase" suffix=".)" />
</names>
</macro>
提供所需的输出:
editor
names editor,
name symbol,
label short (lowercase.)
答案 2 :(得分:1)
试试这个:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*" mode="print_attr">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="node()" mode="print_attr">
<xsl:text> </xsl:text>
<br/>
<xsl:value-of select="name()"/>
<xsl:text> </xsl:text>
<xsl:apply-templates mode="print_attr" select="@*|*" />
</xsl:template>
<xsl:template match="macro">
<xsl:apply-templates mode="print_attr" select="@*|*"/>
</xsl:template>
</xsl:stylesheet>
将生成此输出:
editor
<br/>names editor,
<br/>name symbol,
<br/>label short (lowercase.)