访问 运行 嵌套元素 - Python Docx
Access Run nested elements - Python Docx
这是从word文档
中提取出来的xml
<w:r>
<w:rPr>
<w:rtl/>
</w:rPr>
<w:fldChar w:fldCharType="begin">
<w:ffData>
<w:name w:val="נפתח1"/>
<w:enabled/>
<w:calcOnExit w:val="0"/>
<w:ddList>
<w:listEntry w:val="A"/>
<w:listEntry w:val="B"/>
<w:listEntry w:val="C"/>
<w:listEntry w:val="D"/>
<w:listEntry w:val="E"/>
</w:ddList>
</w:ffData>
</w:fldChar>
</w:r>
我正在尝试进入 <w:ddList>
部分,但无法通过 <w:r>
部分
我知道可以通过以下方式获取 运行 元素
run = doc.paragraphs[0].runs[0]
但是 运行s 没有任何类似属性的列表,所以我不知道如何继续,我们将不胜感激。
您要查找的是 run._r
,它是代表 <w:r>
元素的 lxml.etree._Element
(子类型)对象。
从那里你可以使用 XPath 表达式来得到你想要的东西,比如:
r = run._r
fldChars = r.xpath("./w:fldChar")
.xpath()
调用的 return 值将是与 XPath 表达式匹配的零个或多个对象的列表。
python-docx
-实现的元素对象,所谓的 oxml
类型名称如 CT_Run
的对象,有一个更漂亮的 .xpath()
实现,让你不必大惊小怪在名称空间上。 run._r
对象就是其中之一。例如,如果您调用 fldChars[0].xpath(...)
(fldChart
将是一个“普通”lxml.etree._Element
对象),那么您需要为每个元素提供 Clark-name 样式的名称空间,这充其量是丑陋的。
lxml
文档对此有更多介绍,但如果您可以在 python-docx
元素(如 run._r
上“root”您的 XPath 搜索,那么您可以避免这种情况,使用 like r.xpath("./w:fldChar/w:ffData")
获取那些子元素,而不是从 w:fldChar
元素开始。
这是从word文档
中提取出来的xml<w:r>
<w:rPr>
<w:rtl/>
</w:rPr>
<w:fldChar w:fldCharType="begin">
<w:ffData>
<w:name w:val="נפתח1"/>
<w:enabled/>
<w:calcOnExit w:val="0"/>
<w:ddList>
<w:listEntry w:val="A"/>
<w:listEntry w:val="B"/>
<w:listEntry w:val="C"/>
<w:listEntry w:val="D"/>
<w:listEntry w:val="E"/>
</w:ddList>
</w:ffData>
</w:fldChar>
</w:r>
我正在尝试进入 <w:ddList>
部分,但无法通过 <w:r>
部分
我知道可以通过以下方式获取 运行 元素
run = doc.paragraphs[0].runs[0]
但是 运行s 没有任何类似属性的列表,所以我不知道如何继续,我们将不胜感激。
您要查找的是 run._r
,它是代表 <w:r>
元素的 lxml.etree._Element
(子类型)对象。
从那里你可以使用 XPath 表达式来得到你想要的东西,比如:
r = run._r
fldChars = r.xpath("./w:fldChar")
.xpath()
调用的 return 值将是与 XPath 表达式匹配的零个或多个对象的列表。
python-docx
-实现的元素对象,所谓的 oxml
类型名称如 CT_Run
的对象,有一个更漂亮的 .xpath()
实现,让你不必大惊小怪在名称空间上。 run._r
对象就是其中之一。例如,如果您调用 fldChars[0].xpath(...)
(fldChart
将是一个“普通”lxml.etree._Element
对象),那么您需要为每个元素提供 Clark-name 样式的名称空间,这充其量是丑陋的。
lxml
文档对此有更多介绍,但如果您可以在 python-docx
元素(如 run._r
上“root”您的 XPath 搜索,那么您可以避免这种情况,使用 like r.xpath("./w:fldChar/w:ffData")
获取那些子元素,而不是从 w:fldChar
元素开始。