2

.docxワードファイル(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 )をご覧ください: docxファイルのLineNumbers。

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 に答える