我有一个像下面的xml,我想知道如何在同一节点下输出所有属性。
<?xml version="1.0" encoding="utf-8"?>
<Person ID="1234">
<NAME>Louis //</NAME>
<SEX>M</SEX>
<BIRT>
<DATE>15 SEP 1980</DATE>
<PLAC>UK</PLAC>
</BIRT>
<FAMS REF="F523"/>
<FAMS REF="F524"/>
<FAMC REF="F521"/>
</INDI>
我想输出FAMS和FAMC,如下所示: FAMS:F523,F524 FAMC:F521
谢谢, 劳伦斯
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:apply-templates select="FAMS[1]"/>
<xsl:apply-templates select="FAMC[1]"/>
</xsl:template>
<xsl:template match="FAMS|FAMC">
<xsl:value-of select="name()"/>: <xsl:text/>
<xsl:apply-templates select="../*[name()=name(current())]/@REF"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="@REF">
<xsl:if test="not(position() =1)">, </xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
应用于提供的(并更正为格式良好的)XML文档时:
<Person ID="1234">
<NAME>Louis //</NAME>
<SEX>M</SEX>
<BIRT>
<DATE>15 SEP 1980</DATE>
<PLAC>UK</PLAC>
</BIRT>
<FAMS REF="F523"/>
<FAMS REF="F524"/>
<FAMC REF="F521"/>
</Person>
会产生想要的正确结果:
FAMS: F523, F524
FAMC: F521
答案 1 :(得分:0)
匹配元素x
的所有属性的XPath是x/@*
,或者当前(上下文)节点是@*
。
答案 2 :(得分:0)
路径为FAMS/@REF
:
<xsl:template match="Person">
<xsl:apply-templates select="FAMS/@REF"/>
</xsl:template>
<xsl:template match="FAMS/@REF">
<xsl:if test="position() > 1">, </xsl:if>
<xsl:value-of select="concat('FAMS> ', .)"/>
</xsl:template>