如何使用python向元素正上方的其他级别添加值或文本
我有个问题。 如何在其他元素的节点末尾添加或插入属性值? 事实上,我知道怎么做,但这不是我的问题。 我想将如何使用python向元素正上方的其他级别添加值或文本,python,xml,Python,Xml,我有个问题。 如何在其他元素的节点末尾添加或插入属性值? 事实上,我知道怎么做,但这不是我的问题。 我想将LinkResourceURI的每个值添加到位于Link元素上方的元素Content 请参见下面的示例 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Root> <Story> <XMLElement> <Paragraph
LinkResourceURI
的每个值添加到位于Link
元素上方的元素Content
请参见下面的示例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Story>
<XMLElement>
<ParagraphStyleRange>
<XMLElement>
<CharacterStyleRange>
<Content>BBBBBBBBBB </Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/111.ai"/>
</PDF>
</Rectangle>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/222.ai"/>
</PDF>
</Rectangle>
<Content>CCCCCCCCCC </Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/333.ai"/>
</PDF>
</Rectangle>
</CharacterStyleRange>
<CharacterStyleRange>
<Content>DDDDDDDDDD</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/444.ai"/>
</PDF>
</Rectangle>
</CharacterStyleRange>
</XMLElement>
</ParagraphStyleRange>
</XMLElement>
</Story>
</Root>
这个结果正是我所需要的
<Story>
<XMLElement>
<ParagraphStyleRange>
<XMLElement>
<CharacterStyleRange>
<Content>BBBBBBBBBB C:/test/11l.aiC:/test/222.ai</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/111.ai"/>
</PDF>
</Rectangle>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/222.ai"/>
</PDF>
</Rectangle>
<Content>CCCCCCCCCC file:C:/test/333.ai</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/333.ai"/>
</PDF>
</Rectangle>
</CharacterStyleRange>
<CharacterStyleRange>
<Content>DDDDDDDDDDfile:C:/test/444.ai</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/444.ai"/>
</PDF>
</Rectangle>
</CharacterStyleRange>
</XMLElement>
</ParagraphStyleRange>
</XMLElement>
</Story>
bbbbc:/test/11l.aiC:/test/222.ai
CCCC文件:C:/test/333.ai
dddd文件:C:/test/444.ai
没有错误,但这不是我想要的。
它将所有值插入所有内容节点
您能给我提个建议吗?所以问题是XML的结构不是很好,标记的顺序对您想要做的事情很重要,即:复制LinkURI属性值并附加到前面内容标记的文本中
这样做的一种方法(可能还有其他方法)是迭代CharacterStyleRange标记的子级-因为这保留了子标记的序列-然后记住最近的内容标记并将LinkURI属性内容附加到该标记的文本中
此外,还可以使用findall()中的XPath缩短/简化对嵌套标记的访问
另外,我无法使您的代码正常工作,因为root.findall('Story'):
中Story的初始没有返回任何内容
无论如何,这个代码:
import xml.etree.ElementTree as ET
tree = ET.parse("XML_data.xml")
root = tree.getroot()
for CharacterStyleRange in root.findall('.//CharacterStyleRange'):
# iterate through the children so we can work with the sequence of Content and Rectangle tags
for child in CharacterStyleRange:
if child.tag == 'Content':
# remember the preceding content tag
thecontent = child
elif child.tag == 'Rectangle':
for Link in child.findall('.//Link'):
Link_URL = Link.get('LinkResourceURI')
# append the attribute value to the preceding content tag
thecontent.text += '-----' + Link_URL + '-----'
tree.write('Link_test_result.xml')
生成此输出:
<Story>
<XMLElement>
<ParagraphStyleRange>
<XMLElement>
<CharacterStyleRange>
<Content>BBBBBBBBBB -----file:C:/test/111.ai----------file:C:/test/222.ai-----</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/111.ai" />
</PDF>
</Rectangle>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/222.ai" />
</PDF>
</Rectangle>
<Content>CCCCCCCCCC -----file:C:/test/333.ai-----</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/333.ai" />
</PDF>
</Rectangle>
</CharacterStyleRange>
<CharacterStyleRange>
<Content>DDDDDDDDDD-----file:C:/test/444.ai-----</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/444.ai" />
</PDF>
</Rectangle>
</CharacterStyleRange>
</XMLElement>
</ParagraphStyleRange>
</XMLElement>
</Story>
bbbbbbbb------文件:C:/test/111.ai------文件:C:/test/222.ai-----
CCCC-----文件:C:/test/333.ai-----
dddd-----文件:C:/test/444.ai-----
在解释您真正想要实现的目标时,我对您的问题不是很清楚。请编辑您的问题并添加您想要的XML,因为我无法从您所写的内容中计算出来。是否要将LinkURI属性内容复制到内容标记上的LinkURI属性中?当一个内容标记下面有多个具有LinkURI属性的标记时,会发生什么情况?并更新您的代码/输出,因为当我运行您的问题时,它找不到故事元素,所以不做任何事情,并且当我修复时,我在内容标记中获得与您显示的不同的输出-例如,有------左右当我运行你的代码时添加了什么,你没有在问题中显示出来。哦,我想我看到了你的问题-你想将LinkURI属性值插入到它们前面的内容标记中。那太可怕了。如果您可以重新构造XML,我建议将矩形标记放在它们相关的内容标记中。Barny,您理解我的意思。谢谢是的,这对我来说太难了,因为矩形标签和内容标签是同一级别的。巴尼!!这真是太棒了!!我没有想到要为此使用.tag方法。你真是个天才!我今天从你那里学到了一件事。谢谢。-你是新来的。如果我回答了你的问题,那么请考虑接受和支持我的回答。我建议你通过Python文档中的元素树教程,你会发现各种有趣的东西。好的,我一直在学习ElementTree教程,但对新手和外国人来说都很难。所有的东西都是英文的。不管怎样,我接受了你的回答。。。投票呢?这是什么。你能告诉我怎么做吗?点击选票计数上方答案左侧的向上箭头,向上投票(如果你还没有)。
<Story>
<XMLElement>
<ParagraphStyleRange>
<XMLElement>
<CharacterStyleRange>
<Content>BBBBBBBBBB -----file:C:/test/111.ai----------file:C:/test/222.ai-----</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/111.ai" />
</PDF>
</Rectangle>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/222.ai" />
</PDF>
</Rectangle>
<Content>CCCCCCCCCC -----file:C:/test/333.ai-----</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/333.ai" />
</PDF>
</Rectangle>
</CharacterStyleRange>
<CharacterStyleRange>
<Content>DDDDDDDDDD-----file:C:/test/444.ai-----</Content>
<Rectangle>
<PDF>
<Link LinkResourceURI="file:C:/test/444.ai" />
</PDF>
</Rectangle>
</CharacterStyleRange>
</XMLElement>
</ParagraphStyleRange>
</XMLElement>
</Story>