docx 上的 XSLT 用于合并相邻元素

发布于 2024-12-02 07:56:48 字数 535 浏览 1 评论 0原文

我有一组 MS Word docx 格式的采访记录,我想将其转换为我自己的自定义 xml 模式:

我的 word 文档中的一个段落如下所示:

Jon: 这是我的采访。 现在我在喊现在我又可以正常说话了。

在我的自定义架构中应该如下所示:

<para speaker="jon">
    <content>This is my interview.</content>
    <content emphasis="true">Now I am shouting!</content>
    <content>Now I am speaking normally again.</content>
</para>

在 docx xml 中,我希望在所有其他情况下将相邻的 w:r 元素合并到单个元素中。

任何帮助将不胜感激。

谢谢斯瓦米

I have a set of interview transcripts in MS Word docx format, which I want to convert to my own custom xml schema:

A paragraph in my word doc looks like this:

Jon: This is my interview. Now I am shouting Now I am speaking normally again.

and in my custom schema should look like this:

<para speaker="jon">
    <content>This is my interview.</content>
    <content emphasis="true">Now I am shouting!</content>
    <content>Now I am speaking normally again.</content>
</para>

In the docx xml, I want adjacent w:r elements to be merged into a single element in all other cases.

Any help would be much appreciated.

Thanks

Swami

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绾颜 2024-12-09 07:56:48

您的示例与您的问题并不真正匹配,但要回答“如何合并相邻元素 w/xslt”的问题,请使用您的示例 w:r,并假设“w”命名空间前缀已在范围中声明:

<xsl:template match="w:r[1]">
  <w:r>
    <xsl:copy-of select="@*|node()" />
    <xsl:copy-of select="following-sibling::w:r/node()" />
    <!-- assuming you don't care about attributes on adjacent w:r elements -->
  </w:r>
</xsl:template>

<xsl:template match="w:r" />

您还可以使用 xslt2 分组操作执行此操作,如果您的情况比这个简单的示例更复杂,您可能需要研究一下。

Your example doesn't really match your question, but to answer the question "how to merge adjacent elements w/xslt", using your example w:r, and assuming the "w" namespace prefix is already declared in scope:

<xsl:template match="w:r[1]">
  <w:r>
    <xsl:copy-of select="@*|node()" />
    <xsl:copy-of select="following-sibling::w:r/node()" />
    <!-- assuming you don't care about attributes on adjacent w:r elements -->
  </w:r>
</xsl:template>

<xsl:template match="w:r" />

You can also do this w/xslt2 grouping operations, which you might want to look into if your case is more complex than this simple example.

一百个冬季 2024-12-09 07:56:48

完整代码在这里。感谢 MarkLogic 博客!

http://www.xqzone.com/blog/smallchanges/2007-12-18

Full code here. Thanks to MarkLogic Blog!

http://www.xqzone.com/blog/smallchanges/2007-12-18

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文