如何在元素名称下显示特定元素的所有值?

时间:2017-10-10 18:02:03

标签: xml xslt

Raw Xml:

<section sectiontype="WITNESSES">
                    <bodytext>
                        <p>
                            <text>
                                <person:person>
                                    <person:name.text>NEIL CAVUTO, FBN ANCHOR</person:name.text>
                                </person:person>
                            </text>
                        </p>
                        <p>
                            <text>
                                <person:person>
                                    <person:name.text>REP. BARNEY FRANK, D-MASS.</person:name.text>
                                </person:person>
                            </text>
                        </p>
                    </bodytext>
                </section>

我有XSL模板:

<xsl:template match="base:section[@sectiontype='WITNESSES']/base:bodytext/base:p">
    <xsl:element name="nl"/>
    <xsl:element name="{name()}">           
        <xsl:copy-of select="@*"/>
        <xsl:attribute name="display">block</xsl:attribute>             
        <xsl:element name="hdr">
            <xsl:attribute name="typestyle">BF</xsl:attribute>
            <xsl:attribute name="inline">Y</xsl:attribute>  
            <xsl:text>WITNESSES:</xsl:text>
            <xsl:apply-templates/>
        </xsl:element>                      
    </xsl:element>
</xsl:template>

当前输出我得到:

证人:NEIL CAVUTO,FBN ANCHOR
证人:REP。 BARNEY FRANK,D-MASS。

期望的输出:

证人:

NEIL CAVUTO,FBN主播

REP。 BARNEY FRANK,D-MASS。

1 个答案:

答案 0 :(得分:0)

您提供了一个模板,该模板与某些&lt; base:p&gt;匹配。元素。它为与其匹配的每个元素单独实例化,并且每个实例化在结果树中创建一个文本节点,其值为&#34; WITNESSES&#34;,然后对元素的子元素进行转换。如果要将证人分组在一个标题下,则需要通过对这些base:p元素的共同祖先元素的变换输出标题。

例如,

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:base="http://my.com/base"
    xmlns:person="http://my.com/person">
  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select=".//base:section"/>
  </xsl:template>

  <xsl:template match="base:section[@sectiontype='WITNESSES']">
    <xsl:text>WITNESSES:</xsl:text>
    <xsl:apply-templates select=".//person:name.text"/>
  </xsl:template>

  <xsl:template match="person:name.text">
    <xsl:text>&#x10;</xsl:text>
    <xsl:value-of select="."/>
  </xsl:template>

</xsl:stylesheet>