1

当我尝试转换此 XAML 文档时

<Section xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml:space="preserve" TextAlignment="Left" LineHeight="Auto" IsHyphenationEnabled="False" xml:lang="en-us" FlowDirection="LeftToRight" NumberSubstitution.CultureSource="User" NumberSubstitution.Substitution="AsCulture" FontFamily="Arial" FontStyle="Normal" FontWeight="Normal" FontStretch="Normal" FontSize="12" Foreground="#FF000000" Typography.StandardLigatures="True" Typography.ContextualLigatures="True" Typography.DiscretionaryLigatures="False" Typography.HistoricalLigatures="False" Typography.AnnotationAlternates="0" Typography.ContextualAlternates="True" Typography.HistoricalForms="False" Typography.Kerning="True" Typography.CapitalSpacing="False" Typography.CaseSensitiveForms="False" Typography.StylisticSet1="False" Typography.StylisticSet2="False" Typography.StylisticSet3="False" Typography.StylisticSet4="False" Typography.StylisticSet5="False" Typography.StylisticSet6="False" Typography.StylisticSet7="False" Typography.StylisticSet8="False" Typography.StylisticSet9="False" Typography.StylisticSet10="False" Typography.StylisticSet11="False" Typography.StylisticSet12="False" Typography.StylisticSet13="False" Typography.StylisticSet14="False" Typography.StylisticSet15="False" Typography.StylisticSet16="False" Typography.StylisticSet17="False" Typography.StylisticSet18="False" Typography.StylisticSet19="False" Typography.StylisticSet20="False" Typography.Fraction="Normal" Typography.SlashedZero="False" Typography.MathematicalGreek="False" Typography.EastAsianExpertForms="False" Typography.Variants="Normal" Typography.Capitals="Normal" Typography.NumeralStyle="Normal" Typography.NumeralAlignment="Normal" Typography.EastAsianWidths="Normal" Typography.EastAsianLanguage="Normal" Typography.StandardSwashes="0" Typography.ContextualSwashes="0" Typography.StylisticAlternates="0">
<Table CellSpacing="1" Margin="0,0,0,0"><Table.Columns><TableColumn Width="264" /></Table.Columns><TableRowGroup><TableRow><TableCell Padding="0,0,0,0">
<Paragraph FontFamily="Times New Roman" FontSize="10.666666666666666" Margin="0,0,0,0">
   <Span FontWeight="Bold"><Run>some text</Run></Span><Run> </Run>
   <Span Foreground="#FF00681C"><Run>some more text</Run></Span>
</Paragraph>
</TableCell></TableRow></TableRowGroup></Table>
</Section>

使用这个 XSL

<?xml version="1.0" encoding="UTF-8"?>
            <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
               <xsl:output omit-xml-declaration="yes" indent="yes" />
               <xsl:strip-space elements="*" />
               <xsl:output method="html"/>
               <xsl:template match="/">  
            <html>
                <body>
                   <xsl:apply-templates select="/Table"/>
                    <xsl:apply-templates select="/Paragraph"/>
                    <xsl:apply-templates select="/Run"/>
                    <xsl:apply-templates/>
                    </body>
            </html>
            </xsl:template>

            <xsl:template match="Table">
                <table>
                    <xsl:apply-templates select="TableRowGroup"/>
                </table>
            </xsl:template>

            <xsl:template match="TableRowGroup">
                    <xsl:apply-templates select="TableRow"/>
            </xsl:template>


            <xsl:template match="TableRow">
                <tr>
                    <xsl:apply-templates select="TableCell"/>
                </tr>
            </xsl:template>

            <xsl:template match="TableCell">
                <td>
                </td>
            </xsl:template>


            <xsl:template match="Paragraph">
                <p>
                    <xsl:apply-templates select=""/>
                     <xsl:apply-templates/>
                </p>
            </xsl:template>

            <xsl:template match="Run">
                <span>
                       <xsl:apply-templates/>
                </span>
            </xsl:template>

            <xsl:template match="Span">
                <span>
                       <xsl:apply-templates/>
                </span>
            </xsl:template>

            </xsl:stylesheet>

我得到这个不正确的结果

<html>
  <body>
some text some more text
</body>

4

1 回答 1

1

我看到您的 XSLT 存在一些问题,这些问题会阻止它工作。

  • XSLT 中没有名称空间。需要有一个与输入 XML 中的名称匹配的名称空间,并且在匹配元素时需要使用此名称空间。

  • 您的第一个模板匹配"/",它与根节点匹配。我假设您实际上想要匹配文档元素Sectionapply-templatesthis 内部是匹配以 开头的元素 , "/"这使它们成为绝对路径,因此它们不会匹配任何内容。

我猜测了您期望的输出 XML。以下 XSLT 样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:ns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        version="1.0"
        exclude-result-prefixes="ns">
  <xsl:strip-space elements="*" />
  <xsl:output indent="yes" method="html"/>

  <xsl:template match="/ns:Section">  
    <html>
      <body>
        <xsl:apply-templates select="ns:Table"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="ns:Table">
    <table>
      <xsl:apply-templates select="ns:TableRowGroup"/>
    </table>
  </xsl:template>

  <xsl:template match="ns:TableRowGroup">
    <xsl:apply-templates select="ns:TableRow"/>
  </xsl:template>

  <xsl:template match="ns:TableRow">
    <tr>
      <xsl:apply-templates select="ns:TableCell"/>
    </tr>
  </xsl:template>

  <xsl:template match="ns:TableCell">
    <td>
      <xsl:apply-templates select="ns:Paragraph"/>
    </td>
  </xsl:template>

  <xsl:template match="ns:Paragraph">
    <p>
      <xsl:apply-templates select="ns:Span"/>
    </p>
  </xsl:template>

  <xsl:template match="ns:Run">
    <span>
      <xsl:apply-templates/>
    </span>
  </xsl:template>

  <xsl:template match="ns:Span">
    <span>
      <xsl:apply-templates select="ns:Run"/>
    </span>
  </xsl:template>

</xsl:stylesheet>

当应用于您的示例输入 XML 时,会产生以下输出:

<html>
   <body>
      <table>
         <tr>
            <td>
               <p><span><span>some text</span></span><span><span>some more text</span></span></p>
            </td>
         </tr>
      </table>
   </body>
</html>

这可能需要一些格式化......

于 2013-11-12T19:51:57.287 回答