2013-03-31 3 views
1

У меня есть 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

[Как далеко вы получите при попытке самостоятельно?] (Http://www.whathaveyoutried.com) –

+0

Я пытался сделать что-то вроде: \t \t \t \t \t FAMS: \t \t LawrenceH

+0

смогу 't test прямо сейчас, но попробуйте использовать только 'FAMS', а не' FAMS/node() 'в' 'для каждого' XPath. 'FAMS/node()' будет выбирать узлы содержимого элементов 'FAMS'. –

ответ

0

XPath, чтобы соответствовать все атрибуты элемента x - x/@*, или для текущего (контекстного) узла - @*.

0

Путь FAMS/@REF:

<xsl:template match="Person"> 
    <xsl:apply-templates select="FAMS/@REF"/> 
</xsl:template> 

<xsl:template match="FAMS/@REF"> 
    <xsl:if test="position() &gt; 1">, </xsl:if> 
    <xsl:value-of select="concat('FAMS> ', .)"/> 
</xsl:template> 
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>&#xA;</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 
Смежные вопросы