将docx word文件转换为文本时,如何读取“行号”?

时间:2012-06-12 09:56:43

标签: c# xml-parsing docx

我将.docx word文件(xml内容)转换为带有此代码的文本(在C#中):

private string ReadNode(XmlNode node)
{
    if (node == null || node.NodeType != XmlNodeType.Element)
        return string.Empty;

    StringBuilder sb = new StringBuilder();
    foreach (XmlNode child in node.ChildNodes)
    {
        if (child.NodeType != XmlNodeType.Element) continue;
        switch (child.LocalName)
        {
            case "t":                           // Text
                sb.Append(child.InnerText.TrimEnd());

                string space = ((XmlElement)child).GetAttribute("xml:space");
                if (!string.IsNullOrEmpty(space) && space == "preserve")
                    sb.Append(' ');
                break;

            case "tab":// Tab
                sb.Append("\t");
                break;
            case "p":// Paragraph
                if (ReadNode(child).Trim() != "")
                {
                    sb.Append(ReadNode(child));
                    sb.Append(Environment.NewLine);                            
                }
                break;
            default:
                sb.Append(ReadNode(child));
                break;
        }
    }
    return sb.ToString();
}

如何阅读我的代码中的页面内容的“行号”(类似“p”或“tab”)?

请参阅图片文件(http://i.stack.imgur.com/OVx3O.jpg): LineNumbers in docx file.

1 个答案:

答案 0 :(得分:0)

编辑:

我担心XML不会存储该信息。 XML只是存储文本的一般布局,因此您必须尝试复制布局,然后查看每个文本的位置。这不是很容易。请详细解释您的问题(为什么要尝试这样做),或许我们可以提出另一种不需要获取行号的解决方案?

您需要的信息是在其他“xmlData”节点之一

之下
See "<Pages>2</Pages>"

下面的完整xml:

  <pkg:part pkg:name="/docProps/app.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" pkg:padding="256">
    <pkg:xmlData>
      <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
        <Template>Normal.dotm</Template>
        <TotalTime>0</TotalTime>
        <Pages>2</Pages>
        <Words>341</Words>
        <Characters>1948</Characters>
        <Application>Microsoft Office Word</Application>
        <DocSecurity>0</DocSecurity>
        <Lines>16</Lines>
        <Paragraphs>4</Paragraphs>
        <ScaleCrop>false</ScaleCrop>
        <HeadingPairs>
          <vt:vector size="2" baseType="variant">
            <vt:variant>
              <vt:lpstr>Title</vt:lpstr>
            </vt:variant>
            <vt:variant>
              <vt:i4>1</vt:i4>
            </vt:variant>
          </vt:vector>
        </HeadingPairs>
        <TitlesOfParts>
          <vt:vector size="1" baseType="lpstr">
            <vt:lpstr/>
          </vt:vector>
        </TitlesOfParts>
        <Company/>
        <LinksUpToDate>false</LinksUpToDate>
        <CharactersWithSpaces>2285</CharactersWithSpaces>
        <SharedDoc>false</SharedDoc>
        <HyperlinksChanged>false</HyperlinksChanged>
        <AppVersion>14.0000</AppVersion>
      </Properties>
    </pkg:xmlData>
  </pkg:part>