您将如何解析/存储/修改/保存docx文件

时间:2013-06-04 07:58:12

标签: ruby xml database-design docx

我正在开发一个必须处理docx文件的应用程序。 我知道docx文件只是zip文件中的xml / images / others文件。

我的申请必须:

  1. 导入docx文件并存储其表示(文本,但也 与演示相关的东西,如风格,警察,字体 ....)在数据库中。

  2. 提供修改网页上每个句子文本的方法。

  3. 使用新文本导出docx文件,同时保留样式/演示文稿。

  4. 复杂的是我必须支持嵌套标签。例如,包含句子的标签还可以包含一些标签,以便为单词提供一些粗体。

    我对数据库没有任何要求。它可以是任何东西。

    我的问题更多的是如何处理和表达数据以及如何处理我的需求,而不是如何解析XML。

    谢谢!

1 个答案:

答案 0 :(得分:2)

这个问题并不容易。

以下是我回答的一些相关问题:Creating RTF , DOC , or DOCX in iOS

阅读完之后,这是一个真实的例子:

<w:p w:rsidP="00CA7135" w:rsidR="00137C91" w:rsidRDefault="00137C91">
            <w:r>
                <w:t>Hello</w:t>
            </w:r>
            <w:r w:rsidR="008C194D">
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r>
                <w:t>My name</w:t>
            </w:r>
        </w:p>
        <w:p w:rsidP="00CA7135" w:rsidR="008C194D" w:rsidRDefault="00137C91">
            <w:r>
                <w:t xml:space="preserve">is</w:t>
            </w:r>
            <w:r w:rsidR="008C194D" w:rsidRPr="00E92392">
                <w:rPr>
                    <w:b/>
                </w:rPr>
                <w:t xml:space="preserve">John Doe</w:t>
            </w:r>
            <w:proofErr w:type="spellStart"/>
            <w:r w:rsidR="008C194D" w:rsidRPr="00E92392">
                <w:rPr>
                    <w:b/>
                </w:rPr>
                <w:t/>
            </w:r>
            <w:proofErr w:type="spellEnd"/>
            <w:r w:rsidR="008C194D" w:rsidRPr="00E92392">
                <w:rPr>
                    <w:b/>
                </w:rPr>
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r w:rsidR="008C194D">
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r>
                <w:t>I want to</w:t>
            </w:r>
            <w:r w:rsidR="008C194D">
                <w:t xml:space="preserve"/>
            </w:r>
            <w:r>
                <w:t>show</w:t>
            </w:r>
            <w:r w:rsidR="00E92392">
                <w:t xml:space="preserve">how difficult it is</w:t>
            </w:r>
        </w:p>

如您所见,一个段落中的文字永远不会只在一个笔划中。

回答你的问题:

  1. 我认为将docx存储在数据库中的唯一方法是存储完整XML和图像(或将docx存储为ByteArray)
  2. 要修改一个段落中的文字,您可以搜索所有<w:t>个标记,并使用相同的<w:p>标记对其进行分组。例如,“你好”和“我的名字”在同一个<w:p>中。然后你会找到一种方法来知道插入文本的位置,并在右边插入文本<w:t>
  3. 这只是简单地将XML和图像压缩在一起