2

我使用以下代码(在 C# 中)将 .docx 单词文件(xml 内容)转换为文本:

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): docx 文件中的行号。

4

1 回答 1

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>
于 2012-06-12T22:21:37.673 回答