2017-08-30 84 views
0

我遇到了XSLT问题,并且完全卡住了。从段落中删除嵌入图像

我的情况如下,我收到一个word文档。我必须将其转换为我们的内部XML格式。在这种格式下,图像已将与段落分开。

我已经尝试了许多像每个循环,模板,使用helpercode的事情,但我认为我在XSLT方面的知识仅限于解决该问题。

在易方面,我收到Wordxml如下

<w:document> 
    <w:p> 
     <w:r> 
      <w:t>sometext</w:t> 
     </w:r> 
     <w:r> 
      <w:drawing></w:drawing> 
     </w:r> 
     <w:r> 
      <w:t>anothertext</w:t> 
     </w:r> 
    </w:p> 
</w:document> 

我试图创建以下两种结果。

选项1:

<w:document> 
    <w:p> 
     <w:r> 
      <w:t>sometext</w:t> 
     </w:r> 
    </w:p> 
    <w:drawing></w:drawing> 
    <w:p> 
     <w:r> 
      <w:t>anothertext</w:t> 
     </w:r> 
    </w:p> 
</w:document> 

选项2:

<w:document> 
    <w:p> 
     <w:r> 
      <w:t>sometext</w:t> 
     </w:r> 
     <w:r> 
      <w:t>anothertext</w:t> 
     </w:r> 
    </w:p> 
    <w:drawing></w:drawing> 
</w:document> 
+0

输入XML和XML不能很好形成的个XML。您能否确认是否错过或不能有效使用适当的结束标签。 –

+0

纠正了我的格式不正确的XML –

+0

只是为了确认所需的输出,因为它们有多个文档元素。这又使得它们不是格式良好的XML。你确定你需要与选项中提到的相同的输出吗? –

回答

3

试试这个:

<xsl:template match="w:p[w:r/w:drawing]"> 
    <xsl:copy> 
    <xsl:apply-templates select="*[not(w:drawing)]"/> 
    </xsl:copy> 
    <xsl:apply-templates select="w:r/w:drawing"/> 
</xsl:template> 

我不知道这是否会包括所有的可能性,但它应该输出为每选择2与给出的样本。

+0

我只能通过添加身份模板来重现此解决方案。 – zx485

+0

这不是一个完整的样式表,它是一个能够实现所需更改的模板。我不知道需要什么其他处理,所以我没有假设身份模板是合适的。我不认为我的工作是为他们写OP的xslt,只是为了帮助他们这样做。 – Flynn1179

+0

那么,只是考虑这个笔记。 – zx485

0

这里是选项1的溶液:在选项2

<xsl:template match="node()|@*">    <!-- identity template --> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="w:p">      <!-- remove outter w:p --> 
    <xsl:apply-templates /> 
</xsl:template> 

<xsl:template match="w:r[w:drawing]">   <!-- move up w:drawing one level --> 
    <xsl:copy-of select="*" /> 
</xsl:template> 

<xsl:template match="w:r">      <!-- encapsulate w:r in w:p and copy it --> 
    <w:p> 
    <xsl:copy> 
     <xsl:apply-templates /> 
    </xsl:copy> 
    </w:p> 
</xsl:template> 
+0

虽然这个答案是非常清晰的,并输出我期望的解决方案(选项1),我没有使用它,因为给出的其他答案更具体,因此可以应用比这个解决方案更少的副作用。 –

+0

感谢您花时间解释您的决定。 – zx485