C#でワード(DOCX)ドキュメントからテキストをつかむためにどのように?
-
11-09-2019 - |
質問
私は、Word文書からプレーンテキストを取得しようとしています。具体的には、XPathは私に迷惑を与えています。どのようにしてタグを選択しますか?ここで私が持っているコードです。
public static string TextDump(Package package)
{
StringBuilder builder = new StringBuilder();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(package.GetPart(new Uri("/word/document.xml", UriKind.Relative)).GetStream());
foreach (XmlNode node in xmlDoc.SelectNodes("/descendant::w:t"))
{
builder.AppendLine(node.InnerText);
}
return builder.ToString();
}
解決
あなたの問題は、XML名前空間です。 SelectNodes
は、完全な名前空間に<w:t/>
を翻訳する方法がわかりません。したがって、あなたは、2番目の引数としてXmlNamespaceManager
を受け取るオーバーロードを使用する必要があります。私はあなたのコードを少し変更し、動作しているようです。
public static string TextDump(Package package)
{
StringBuilder builder = new StringBuilder();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(package.GetPart(new Uri("/word/document.xml", UriKind.Relative)).GetStream());
XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
mgr.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
foreach (XmlNode node in xmlDoc.SelectNodes("/descendant::w:t", mgr))
{
builder.AppendLine(node.InnerText);
}
return builder.ToString();
}
他のヒント
Open XML形式SDK 2.0を見てみましょうに。そここのような文書を処理する方法についていくつかの例、>。
私はそれを使用していないものの、この Open OfficeのXML C#ライブラリは、あなたができることをを同様に見てみます。
所属していません StackOverflow