首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将复杂的.docx文件导入为.xml并提取章节

将复杂的.docx文件导入为.xml并提取章节
EN

Stack Overflow用户
提问于 2017-02-14 12:15:42
回答 1查看 1.5K关注 0票数 1

-更新--也许有人可以假设另一种可能性,将一个.docx文档分成几个章节,将.docx导入R

首先,我要感谢这个非常棒的论坛。我为即将出版的问题找到了几个解决方案。但这次我什么都没找到..。

但是,我有一个复杂的.docx文档,其中包含一个索引,格式为.xml

代码语言:javascript
复制
library(XML)
xmlfile <- xmlParse("C:/Users/Documents/stihl.xml", options = HUGE)

topxml <- xmlRoot(xmlfile)

topxml <- xmlSApply(topxml, function(x) xmlSApply(x, xmlValue))
xml_df <- data.frame(t(topxml), row.names = NULL, node)

以及读取XML文件的其他可能性。我的.docx文档有一个索引,现在我想提取几个索引内容。作为一个.docx示例

代码语言:javascript
复制
1. Introduction  
   This is an introduction importing XML by R.  
2. UserGuide  
   Userguides are often helpful.  
2.1 Style  
   The style should be always the same.  
2.2 Language  
   I hope my Language is readable, because I'm contacting you from Germany. 

因此,接收分离章节的内容将是很好的,例如存储在向量中。

代码语言:javascript
复制
result 
[1]This is an introduction importing XML by R.
[2]Userguides are often helpful.
[3]The style should be always the same.
[4]I hope my Language is readable, because I'm contacting you from Germany.

也许还有其他保留结构的可能性,但我提到了包含树结构的XML导入是最简单的方法。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">

  <pkg:part 
    pkg:name="/_rels/.rels" 
    pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" 
    pkg:padding="512">
    <pkg:xmlData>
       <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
          <Relationship 
           Id="rId3" 
           Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" 
           Target="docProps/app.xml"/>
          <Relationship 
           Id="rId2" 
           Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" 
           Target="docProps/core.xml"/>
          <Relationship Id="rId1" 
           Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" 
           Target="word/document.xml"/>
       </Relationships>
    </pkg:xmlData>
  </pkg:part>

  <pkg:part 
   #serveral relationships
  </pkg:part>

  <pkg:part 
    pkg:name="/word/document.xml" 
    pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
     <pkg:xmlData>

      <w:document mc:Ignorable="w14 w15 wp14" 




    xmlns:wpc:http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas
   xmlns:mc:http://schemas.openxmlformats.org/markup-compatibility/2006
   xmlns:o:urn:schemas-microsoft-com:office:office
    xmlns:r:http://schemas.openxmlformats.org/officeDocument/2006/relationships
    xmlns:m:http://schemas.openxmlformats.org/officeDocument/2006/math
    xmlns:v:urn:schemas-microsoft-com:vml
    xmlns:wp14:http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing
    xmlns:wp:http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing
    xmlns:w10:urn:schemas-microsoft-com:office:word
    xmlns:w:http://schemas.openxmlformats.org/wordprocessingml/2006/main
    xmlns:w14:http://schemas.microsoft.com/office/word/2010/wordml
   xmlns:w15:http://schemas.microsoft.com/office/word/2012/wordml
    xmlns:wpg:http://schemas.microsoft.com/office/word/2010/wordprocessingGroup
    xmlns:wpi:http://schemas.microsoft.com/office/word/2010/wordprocessingInk
    xmlns:wne:http://schemas.microsoft.com/office/word/2006/wordml
   xmlns:wps:http://schemas.microsoft.com/office/word/2010/wordprocessingShape

         <w:body>

           <w:p> ...
          </w:p>

          <w:p w14:paraId="5BB64FEF" w14:textId="77777777" w:rsidR="005A3789" w:rsidRDefault="005A3789" w:rsidP="005A3789">
           <w:pPr>
            <w:pStyle w:val="Inhaltsverzeichnisberschrift"/>
           </w:pPr>
           <w:r>
            <w:lastRenderedPageBreak/>
            <w:t>Inhaltsverzeichnis</w:t>
           </w:r>
          </w:p>

“‘Inhaltsverzeichnis”是我的索引的第一步。路径是包-> 3.部分-> xmldata ->文档-> body -> p

这些信息存储在这里,例如

代码语言:javascript
复制
<w:p w14:paraId="15ECF978" w14:textId="77777777" w:rsidR="009B5500" w:rsidRDefault="005A3789">
<w:pPr>
<w:pStyle w:val="Verzeichnis1"/>
<w:rPr>
<w:rFonts w:eastAsiaTheme="minorEastAsia"/>
<w:b w:val="0"/>
<w:noProof/>
<w:color w:val="auto"/>
<w:lang w:eastAsia="de-DE"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:b w:val="0"/>
</w:rPr>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:instrText xml:space="preserve"> TOC \o "1-4" \h \z \u 
</w:instrText>
</w:r>
<w:r>
<w:rPr>
<w:b w:val="0"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:hyperlink w:anchor="_Toc474825312" w:history="1">
<w:r w:rsidR="009B5500" w:rsidRPr="009D0220"><w:rPr>
<w:rStyle w:val="Hyperlink"/>
<w:noProof/>
</w:rPr>
                  **<w:t>1</w:t>**
</w:r>
<w:r w:rsidR="009B5500"><w:rPr><w:rFonts w:eastAsiaTheme="minorEastAsia"/>
<w:b w:val="0"/>
<w:noProof/>
<w:color w:val="auto"/>
<w:lang w:eastAsia="de-DE"/>
</w:rPr><w:tab/>
</w:r>
<w:r w:rsidR="009B5500" w:rsidRPr="009D0220">
<w:rPr>
<w:rStyle w:val="Hyperlink"/>
<w:noProof/>
</w:rPr>
                  **<w:t>Management Summary</w:t>**
</w:r>
<w:r w:rsidR="009B5500">
<w:rPr>
<w:noProof/>
<w:webHidden/>
</w:rPr>
<w:tab/>
</w:r>
<w:r w:rsidR="009B5500">
<w:rPr>
<w:noProof/>
<w:webHidden/>
</w:rPr><w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r w:rsidR="009B5500">
<w:rPr>
<w:noProof/>
<w:webHidden/>
</w:rPr>
<w:instrText xml:space="preserve"> PAGEREF _Toc474825312 \h </w:instrText>
</w:r>
<w:r w:rsidR="009B5500">
<w:rPr>
<w:noProof/>
<w:webHidden/>
</w:rPr>
</w:r>
<w:r w:rsidR="009B5500">
<w:rPr>
<w:noProof/>
<w:webHidden/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r w:rsidR="009B5500">
<w:rPr>
<w:noProof/>
<w:webHidden/>
</w:rPr>
               **<w:t>6</w:t>**
</w:r>
<w:r w:rsidR="009B5500">
<w:rPr>
<w:noProof/>
<w:webHidden/>
</w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:hyperlink>
</w:p>

这是索引1.管理摘要6的第一个条目。

EN

回答 1

Stack Overflow用户

发布于 2017-02-14 14:37:05

我们可以使用:

代码语言:javascript
复制
library(xml2)
library(magrittr)

x <- read_xml("path/to/file.xml")

titles <- xml_find_all(x, 
               "/pkg:package//pkg:part/pkg:xmlData/w:document/w:body/w:p/w:hyperlink/w:r/w:t") %>%  
         xml_text() %>% 
         matrix(ncol = 3, byrow = T) %>% 
         as.data.frame()

colnames(titles)<- c('numChapter', 'title', 'numPage')

这将检索与那个xpath对应的所有节点中的文本。

根据您给定的示例,xpath包含(我认为是) numChapter、它的titlenumPage

如前所述,如果xml格式不正确,并且/或缺少一些名称空间,这将产生一个错误。

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42225937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档