Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XAML XSLT属性无法匹配_Xaml_Xslt - Fatal编程技术网

XAML XSLT属性无法匹配

XAML XSLT属性无法匹配,xaml,xslt,Xaml,Xslt,当我尝试转换这个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.Cul

当我尝试转换这个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>

一些文字,还有一些文字

我发现XSLT存在一些问题,这些问题会使它无法工作

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

  • 您的第一个模板匹配与根节点匹配的
    “/”
    。我 假设您确实想要匹配文档元素
    部分
    。这个
    apply templates
    其中包含以开头的匹配元素
    “/”
    ,这使它们成为绝对路径,因此它们不会匹配任何内容

我猜测了您期望的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>

一些文本更多文本


这可能需要一些格式…

我发现XSLT存在一些问题,这些问题会使它无法工作

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

  • 您的第一个模板匹配与根节点匹配的
    “/”
    。我 假设您确实想要匹配文档元素
    部分
    。这个
    apply templates
    其中包含以开头的匹配元素
    “/”
    ,这使它们成为绝对路径,因此它们不会匹配任何内容

我猜测了您期望的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>

一些文本更多文本

这可能需要一些格式设置…

您想要的“正确”结果是什么?您想要的“正确”结果是什么?