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

谢谢,劳伦斯

4

3 回答 3

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
于 2013-03-31T16:05:07.620 回答
0

匹配元素所有属性的 XPathxx/@*,或当前(上下文)节点的 XPath 是@*

于 2013-03-31T11:39:13.860 回答
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>
于 2013-03-31T11:42:07.847 回答