Python 无法分析XML文件中的签名节点

Python 无法分析XML文件中的签名节点,python,xml-parsing,Python,Xml Parsing,我试图解析XML中的“签名”节点,并获取XML中DigestValue和SignatureValue字段的值。我看到的输出是 {'{http://www.w3.org/2000/09/xmldsig#}SignedInfo', '{http://www.w3.org/2000/09/xmldsig#}SignatureValue'} 用于解析的Xml文件片段如下所示 <Manifest> <Signature xmlns="http://ww

我试图解析XML中的“签名”节点,并获取XML中DigestValue和SignatureValue字段的值。我看到的输出是

{'{http://www.w3.org/2000/09/xmldsig#}SignedInfo', '{http://www.w3.org/2000/09/xmldsig#}SignatureValue'}
用于解析的Xml文件片段如下所示

<Manifest>
    <Signature
        xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
            <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
            <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
            <Reference URI="">
                <Transforms>
                    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                </Transforms>
                <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
                <DigestValue>YzE5K8Y9+gIrLDqLsvunqquxPxSNTphOadUpEOVbAV4=</DigestValue>
            </Reference>
        </SignedInfo>
        <SignatureValue>I6iJvmecDy0Cm8jMwv/wlmT0oYkuPRpmieHgbZW8E47yrNLfQhpKUC8zxn9nQarceS6bCN44TeUz7lQz6q53odzfmN6SgpeCaBIXeAeJI7gnmdZO+iXYi3DKZ/3NuEkqpVEpR+hwLeTBWODaIHHm4I0huRlLppN2FC4jJn9qxIaXVQXRb+1PBEavulLlYI8z5dJPatyMDAr0YLTx3FEhYr+i6Jt2YHq0ykZ7mjFQTZQkzo6kQws9+aUaBURbdntJYWwqe7ofTVX0jdd1fD0i3LdYeHkA/+tJQg4BvAQE5HUi2oYdeYrt7sRxV+NN94Tgj7fHOscVZiUsCJew+Ah19g==</SignatureValue>
    </Signature>
</Manifest>

YzE5K8Y9+GIRLDQLSVUNQQUXPXSNTPHOADUPEOVAV4=
2.在一份研究报告中,一份研究报告中,一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中的一份研究报告中,一份研究报告中的一份研究报告中的一份研究报告中的一份研究,一份研究的一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究,一份研究+NN94TGJ7Fhosvziuscjew+Ah19g==

您可以通过如下索引访问xml元素

导入操作系统
将xml.etree.ElementTree作为ET导入
root=ET.parse(“MyFile.xml”).getroot()
打印(根[0][0][2][1]。文本)
打印(根目录[0][1]。文本)
输出

YzE5K8Y9+gIrLDqLsvunqquxPxSNTphOadUpEOVbAV4=

I6iJvmecDy0Cm8jMwv/wlmT0oYkuPRpmieHgbZW8E47yrNLfQhpKUC8zxn9nQarceS6bCN44TeUz7lQz6q53odzfmN6SgpeCaBIXeAeJI7gnmdZO+iXYi3DKZ/3NuEkqpVEpR+hwLeTBWODaIHHm4I0huRlLppN2FC4jJn9qxIaXVQXRb+1PBEavulLlYI8z5dJPatyMDAr0YLTx3FEhYr+i6Jt2YHq0ykZ7mjFQTZQkzo6kQws9+aUaBURbdntJYWwqe7ofTVX0jdd1fD0i3LdYeHkA/+tJQg4BvAQE5HUi2oYdeYrt7sRxV+NN94Tgj7fHOscVZiUsCJew+Ah19g==

对于可伸缩性,如果您想解析每个元素以找到感兴趣的值,请使用下面的程序。 这将产生与上述相同的输出

将xml.etree.ElementTree作为ET导入
root=ET.parse(“MyFile.xml”).getroot()
def printval(tg):
如果tg.tag.endswith(“DigestValue”):
打印(tg.text)
返回
如果tg.tag.endswith(“SignatureValue”):
打印(tg.text)
返回
如果len(list(tg))>=1:
对于tg中的b:
printval(b)
printval(根)

这里有没有关于成功解析xml的帮助?谢谢liju。通过索引练习效果很好。是否可以使用标记等来解析值,使其更通用,并适用于具有此类节点的所有类型的XML文件?@manju.g.r。我已经更新了上面的答案。请检查。谢谢@Liju这两种解决方案都有效。但我更喜欢解决方案2,因为它更通用。
YzE5K8Y9+gIrLDqLsvunqquxPxSNTphOadUpEOVbAV4=

I6iJvmecDy0Cm8jMwv/wlmT0oYkuPRpmieHgbZW8E47yrNLfQhpKUC8zxn9nQarceS6bCN44TeUz7lQz6q53odzfmN6SgpeCaBIXeAeJI7gnmdZO+iXYi3DKZ/3NuEkqpVEpR+hwLeTBWODaIHHm4I0huRlLppN2FC4jJn9qxIaXVQXRb+1PBEavulLlYI8z5dJPatyMDAr0YLTx3FEhYr+i6Jt2YHq0ykZ7mjFQTZQkzo6kQws9+aUaBURbdntJYWwqe7ofTVX0jdd1fD0i3LdYeHkA/+tJQg4BvAQE5HUi2oYdeYrt7sRxV+NN94Tgj7fHOscVZiUsCJew+Ah19g==