使用XSLT转换展平嵌套的XML/层次结构

使用XSLT转换展平嵌套的XML/层次结构,xml,xslt,xpath,soa,Xml,Xslt,Xpath,Soa,我有一个嵌套的分层xml结构,它将使用xsl转换进行扁平化。以下是场景 <company> <Managers> <Manager> <Name>Matt</Name> <ID>1</ID> <Manager> <Name>Joe</Name> <ID>11</ID&

我有一个嵌套的分层xml结构,它将使用xsl转换进行扁平化。以下是场景

<company>
  <Managers>
    <Manager>
       <Name>Matt</Name>
       <ID>1</ID>
       <Manager>
          <Name>Joe</Name>
          <ID>11</ID>
          <Manager>
          <Name>Dave</Name>
          <ID>111</ID>
       </Manager>
       </Manager>
    </Manager>
    <Manager>
        <Name>mike</Name>
          <ID>2</ID>>
    </Manager>
  </Managers>
</company>

更好的选择是通过@Mathias Mueller

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text" encoding="UTF-8"/>

    <xsl:template match="Manager">
        <xsl:value-of select="Name" />
        <xsl:text>: </xsl:text>
        <xsl:value-of select="ID" />
        <xsl:text> </xsl:text>
        <xsl:apply-templates/>
    </xsl:template>   

    <xsl:template match="text()"/>

</xsl:transform>
输出:

  Matt: 1 Joe: 11 Dave: 111 mike: 2 

你试过什么吗?阅读任何教程?你到底有什么困难?嗯,是的。我认为问题是什么是正确的XPath。XSLT非常简单。将来,最好发布一个您尝试过的示例。请不要做标记垃圾邮件,并限制为直接相关的标记。如果您在
xsl:text
中输出空格字符,那么为什么不将
也放在
xsl:text
中呢?另外,我认为没有必要匹配
管理者
,我使用空格字符是因为它会被吸收,但是:不会。不过,您的方法更好,我不认为在模板中使用应用模板。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="//Managers">
       <xsl:for-each select="descendant-or-self::Manager">
        <xsl:value-of select="Name" />: <xsl:value-of select="ID" /><xsl:text> </xsl:text>
      </xsl:for-each>
    </xsl:template>    

</xsl:transform>
  Matt: 1 Joe: 11 Dave: 111 mike: 2