我试图从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();
}
Run Code Online (Sandbox Code Playgroud) 我想删除包含的段落"{Some Text}".下面的方法就是这样,但是我注意到在删除段落后,剩下的是空段落元素.
如何以<w:p />编程方式删除元素?
以下是我最初用来删除段落的内容.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(file, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
Document D = mainPart.Document;
foreach (Paragraph P in D.Descendants<Paragraph>())
{
if (P.InnerText.Contains("{SomeText}"))
{
P.RemoveAllChildren();
//P.Remove(); //doesn't remove
}
}
D.Save();
}
Run Code Online (Sandbox Code Playgroud)
这就是document.xml的后缀:
<w:p />
<w:p />
<w:p />
<w:p />
<w:p />
<w:p />
<w:p />
Run Code Online (Sandbox Code Playgroud) 我正在使用 XML 从头开始构建 DocX 文档。我有一个非常简单的目标:创建一个项目符号列表,就像ulHTML 中的a 一样。阅读编号列表的WordProcessingML 规范(第 2.9 节),我创建了我认为可以满足此要求的内容。这是我的numbering.xml样子:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:numbering xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
<w:abstractNum w:abstractNumId="1">
<w:multiLevelType w:val="singleLevel"/>
<w:lvl w:ilvl="0">
<w:start w:val="1"/>
<w:numFmt w:val="bullet"/>
<w:lvlText w:val="•"/>
<w:lvlJc w:val="left"/>
<w:pPr>
<w:tabs>
<w:tab w:pos="360" w:val="num"/>
</w:tabs>
<w:ind w:hanging="360" w:left="360"/>
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Symbol" w:hAnsi="Symbol" w:hint="default"/>
</w:rPr>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1">
<w:abstractNumId w:val="1"/>
</w:num>
</w:numbering>
Run Code Online (Sandbox Code Playgroud)
所以我有一个 id 为 1 的抽象编号,定义为带有一些缩进的单个级别和一个项目符号作为 lvlText(符号•呈现为 …
我想获得输出两个项目符号列表,如图所示:

但我得到的是这两个列表都有第二个(黑色圆圈)皮肤.
我的代码:
private static void AddNumberingDefinition(WordprocessingDocument docx)
{
NumberingDefinitionsPart numberingPart =
docx.MainDocumentPart.AddNewPart<NumberingDefinitionsPart>();
Numbering element =
new Numbering(
// new Nsid(){ Val="FFFFFF80"},
new AbstractNum(new Nsid() { Val = "FFFFFF80" },
new MultiLevelType() { Val = MultiLevelValues.HybridMultilevel },
new TemplateCode() { Val = "4970B4E6" },
new Level(
new NumberingFormat() { Val = NumberFormatValues.Bullet },
new LevelText() { Val = "°" },//char.ConvertFromUtf32(61616) }
new LevelJustification() { Val = LevelJustificationValues.Left }//,
// new RunProperties() { RunFonts = new RunFonts() { Hint = FontTypeHintValues.Default, …Run Code Online (Sandbox Code Playgroud)