1

我有以下类型的 xml

`<ns:response>
 <ns:transport_car>
  <ns:transport_model> abc</ns:transport_model>
  <ns:transport_model> xyz</ns:transport_model>
   </ns:transport_car>
    </ns:response>`

如何格式化此 xsl 以打印表单文本:

Transport type= car
Model name:
abc xyz
4

2 回答 2

1

这种转变

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ns="some:ns">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*/*[starts-with(local-name(), 'transport_')]">
  <xsl:text>Transport type= </xsl:text>
  <xsl:value-of select="substring-after(local-name(), 'transport_')"/>
  <xsl:apply-templates/>
 </xsl:template>

 <xsl:template match="ns:transport_model[1]">
Model name:
<xsl:value-of select="normalize-space()"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<ns:response xmlns:ns="some:ns">
    <ns:transport_car>
        <ns:transport_model> abc</ns:transport_model>
        <ns:transport_model> xyz</ns:transport_model>
    </ns:transport_car>
</ns:response>

产生想要的正确结果:

Transport type= car
Model name:
abc xyz
于 2013-04-25T02:46:59.240 回答
0

这个怎么样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ns="something">
  <xsl:output method="text" indent="yes"/>

  <xsl:template match="/*">
    <xsl:apply-templates
      select="*[substring-after(local-name(), 'transport_') != '']" />
  </xsl:template>

  <xsl:template match="/*/*">
    <xsl:value-of
      select="concat('Transport type= ', 
                     substring-after(local-name(), 'transport_'),
                     '&#xA;Model name:&#xA;')"/>
    <xsl:apply-templates select="ns:transport_model" />
  </xsl:template>

  <xsl:template match="ns:transport_model">
    <xsl:value-of select="concat(normalize-space(), ' ')"/>
  </xsl:template>
</xsl:stylesheet>

在示例输入上运行时(添加命名空间后),结果为:

Transport type= car
Model name:
abc xyz 
于 2013-04-25T01:06:25.270 回答