Xml 使用XSLT将XAML转换为XHTML

Xml 使用XSLT将XAML转换为XHTML,xml,xslt,xml-parsing,Xml,Xslt,Xml Parsing,我需要使用XSLT将X(A)ML转换为XHTML 以下是XAML输入数据: <Section> <Paragraph> <Span Text="plain 1 " /> <Span Text="bold" FontWeight="bold" /> <Span Text=" plain 2 " /> <Span Text="italic" FontStyle="italic" />

我需要使用XSLT将X(A)ML转换为XHTML

以下是XAML输入数据:

<Section>
  <Paragraph>
    <Span Text="plain 1 " />
    <Span Text="bold" FontWeight="bold" />
    <Span Text=" plain 2 " />
    <Span Text="italic" FontStyle="italic" />
    <Span Text=" plain3 " />
    <Span Text="underline" UnderlineDecoration="line" />
    <Span Text="Bold" FontWeight="bold" />
  </Paragraph>
  <Paragraph>
    <Span Text="plain " />
    <Span Text="Italic" FontStyle="italic" />
    <Span Text=" plain " />
  </Paragraph>
  <Paragraph>
    <Span Text="BoldItalic" FontWeight="bold" FontStyle="italic" />
  </Paragraph>
  <Paragraph>
    <Span Text="plain " />
    <Span Text=" Bold " FontWeight="bold" />
    <Span Text=" BoldItalic " FontWeight="bold" FontStyle="italic" />
    <Span Text=" BoldItalicUnderline " FontWeight="bold" FontStyle="italic" UnderlineDecoration="line" />
    <Span Text=" BoldItalic " FontWeight="bold" FontStyle="italic" />
    <Span Text=" Bold " FontWeight="bold" />
    <Span Text=" plain " />
  </Paragraph>
  <Paragraph>
    <Span Text="plain " />
    <Span Text="BoldItalicUnderline " FontWeight="bold" FontStyle="italic" UnderlineDecoration="line" />
    <Span Text=" plain " />
  </Paragraph>
  <Paragraph>
    <Span Text="plain " />
    <Span Text="Bold " FontWeight="bold" />
    <Span Text=" Bold and Italic " FontWeight="bold" FontStyle="italic" />
    <Span Text=" Bold and Italic and Underline " FontWeight="bold" FontStyle="italic" UnderlineDecoration="line" />
    <Span Text=" Bold and Italic " FontWeight="bold" FontStyle="italic" />
    <Span Text=" Bold " FontWeight="bold" />
    <Span Text=" plain " />
  </Paragraph>
</Section>

使用XSLT输出的预期XHTML数据:

<QuestionText xml:space="preserve">
  <p>plain 1 <b>bold</b> plain 2 <i>italic</i> plain3 <u>underline</u><b>Bold</b></p>
  <p>plain <i>Italic</i> plain </p>
  <p><b><i>BoldItalic</i></b></p>
  <p>plain <b> Bold <i> BoldItalic <u> BoldItalicUnderline </u> BoldItalic </i> Bold </b> plain </p>
  <p>plain <b><i><u>BoldItalicUnderline </u></i></b> plain </p>
  <p>plain <b>Bold <i> Bold and Italic <u> Bold and Italic and Underline </u> Bold and Italic </i> Bold </b> plain </p>
</QuestionText>

普通1粗体普通2斜体普通3下划线边框

纯斜体

粗体斜体

粗斜体粗斜体粗斜体粗斜体粗斜体粗斜体

普通粗体斜体斜体斜体

粗体和斜体粗体和斜体以及下划线粗体和斜体粗体

我不知道如何将所有跨度(同级)节点转换为一个父节点


非常感谢您在XSLT上将上述XAML转换为XHTML方面提供的任何帮助。

为每个非普通的
提供一个模板,并提高优先级:

 match="Span[@FontWeight = 'bold']" priority="2"
match="Span" priority="1"
等等,内容大概是这样的

 <b><xsl:value-of select="@Text" /></b>
后者的内容可以是

<xsl:value-of select="@Text" />
给定示例输入,输出为:

<?xml version="1.0" encoding="utf-8"?><QuestionText xml:space="preserve">

  <p>plain 1 <b>bold</b> plain 2 <i>italic</i> plain3 <u>underline</u><b>Bold</b></p>
  <p>plain <i>Italic</i> plain </p>
  <p><i><b>BoldItalic</b></i></p>
  <p>plain <b> Bold </b><i><b> BoldItalic </b></i><u><i><b> BoldItalicUnderline </b></i></u><i><b> BoldItalic </b></i><b> Bold </b> plain </p>
  <p>plain <u><i><b>BoldItalicUnderline </b></i></u> plain </p>
  <p>plain <b>Bold </b><i><b> Bold and Italic </b></i><u><i><b> Bold and Italic and Underline </b></i></u><i><b> Bold and Italic </b></i><b> Bold </b> plain </p>

    </QuestionText>

普通1粗体普通2斜体普通3下划线边框

纯斜体

粗体斜体

粗斜体粗斜体粗斜体粗斜体粗斜体粗斜体

普通粗体斜体斜体斜体

粗体和斜体粗体和斜体以及下划线粗体和斜体粗体


为每个非普通
设置一个模板,优先级提高:

 match="Span[@FontWeight = 'bold']" priority="2"
match="Span" priority="1"
等等,内容大概是这样的

 <b><xsl:value-of select="@Text" /></b>
后者的内容可以是

<xsl:value-of select="@Text" />
给定示例输入,输出为:

<?xml version="1.0" encoding="utf-8"?><QuestionText xml:space="preserve">

  <p>plain 1 <b>bold</b> plain 2 <i>italic</i> plain3 <u>underline</u><b>Bold</b></p>
  <p>plain <i>Italic</i> plain </p>
  <p><i><b>BoldItalic</b></i></p>
  <p>plain <b> Bold </b><i><b> BoldItalic </b></i><u><i><b> BoldItalicUnderline </b></i></u><i><b> BoldItalic </b></i><b> Bold </b> plain </p>
  <p>plain <u><i><b>BoldItalicUnderline </b></i></u> plain </p>
  <p>plain <b>Bold </b><i><b> Bold and Italic </b></i><u><i><b> Bold and Italic and Underline </b></i></u><i><b> Bold and Italic </b></i><b> Bold </b> plain </p>

    </QuestionText>

普通1粗体普通2斜体普通3下划线边框

纯斜体

粗体斜体

粗斜体粗斜体粗斜体粗斜体粗斜体粗斜体

普通粗体斜体斜体斜体

粗体和斜体粗体和斜体以及下划线粗体和斜体粗体


我无法控制设置优先级。对不起,这是我的错误。请忽略我之前的评论。你能帮我解决这个问题的风格组合方面吗。我对XSLT比较陌生。@teenboy:你能使用XSLT2.0吗,还是只能使用1.0?因为如果你能使用2.0,有一些特性会使它变得更容易。谢谢你的支持。非常感谢你的帮助。最后一个问题(希望如此),在明确指定之前,如何防止在…之间出现任何换行。@teenboy:在
“段落”
模板中,将
select=“*”
添加到应用模板中。这将防止它在
元素之间复制(空白)文本节点,否则默认情况下会这样做。我将相应地更新我的答案。我无法控制设置优先级。对不起,这是我的错误。请忽略我之前的评论。你能帮我解决这个问题的风格组合方面吗。我对XSLT比较陌生。@teenboy:你能使用XSLT2.0吗,还是只能使用1.0?因为如果你能使用2.0,有一些特性会使它变得更容易。谢谢你的支持。非常感谢你的帮助。最后一个问题(希望如此),在明确指定之前,如何防止在…之间出现任何换行。@teenboy:在
“段落”
模板中,将
select=“*”
添加到应用模板中。这将防止它在
元素之间复制(空白)文本节点,否则默认情况下会这样做。我会相应地更新我的答案。