2014-10-07 3 views
1

У меня есть следующий XML-файл:Извлечение значения атрибута, LXML

'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14"><w:body><w:p w:rsidR="00706A37" w:rsidRPr="004A1CE5" w:rsidRDefault="004A1CE5"><w:pPr><w:pStyle w:val="Heading1"/><w:numPr><w:ilvl w:val="12"/><w:numId w:val="0"/></w:numPr><w:rPr><w:sz w:val="28"/><w:szCs w:val="28"/></w:rPr></w:pPr><w:commentRangeStart w:id="0"/><w:r w:rsidRPr="004A1CE5"><w:rPr><w:sz w:val="28"/><w:szCs w:val="28"/></w:rPr><w:t>H</w:t></w:r><w:commentRangeEnd w:id="0"/><w:r w:rsidR="00A23794"><w:rPr><w:rStyle w:val="CommentReference"/> 

И мне нужно, чтобы извлечь значение id в <w:commentRangeStart> тега. Я посмотрел на многие вопросы по SO и нашел следующий тип:

Я попробовал:. (итерация над каждым р с commentRangeStart тегом, и восстановить ATTRIB Это не дало ничего

for p in lxml_tree.xpath('.//w:p/commentRangeStart',namespaces = {'w':w}): 
    print p.attrib 

Я попробовал различным. комбинации с 'commentRangeStart[@id]' и commentRangeStart/@id, но ни один работал я ссылался на многие вопросы, и один из них here
Я бы предпочел путь, в котором он будет идти через каждый р, а затем искать тега комментария как:...

for p in lxml_tree.xpath('.//w:p',namespaces = {'w':w}): 
    p.xpath(./w:commentRangeStart/...) 

и т. Д.

Что не так с моим выражением. ??

ответ

2

Вы должны квалифицироваться имен:

for p in root.xpath('.//w:p/w:commentRangeStart', namespaces={'w':w}): 
    print p.attrib 

выход:

{'{http://schemas.openxmlformats.org/wordprocessingml/2006/main}id': '0'} 

Альтернатива:

for id_ in root.xpath('.//w:p/w:commentRangeStart/@w:id', namespaces={'w': w}): 
    print id_ 

выход:

0 
+0

Могу ли я заменить дополнительный w на // ?? –

+0

@Swordy, Если вы его замените, вы получите пустой список элементов. – falsetru

+0

Вы могли бы добавить код для итерации уровня 2? Я пробовал это: для p в lxml_tree.xpath ('.// ​​w: p/w', namespaces = {'w': w}): для id_ в p.xpath ('./ w: commentRangeStart/@ w : id ', namespaces = {' w ': w}): print id_ , но ничего не печатает .. –

Смежные вопросы