将 XML 子元素解析为字符串

CL

我正在尝试解析复杂的 XML,而 xpath 的行为不像我想象的那样。这是我的示例 xml:

<project>
    <samples>
        <sample>show my balance</sample>
        <sample>show me the <subsample value='USD'>money</subsample>today</sample>
    </samples>
</project>

这是我的python代码:

from lxml import etree

somenode="<project><samples><sample>show my balance</sample><sample>show me the <subsample value='USD'>money</subsample>today</sample></samples></project>"

somenode_etree = etree.fromstring(somenode)

for x in somenode_etree.iterfind(".//sample"):
    print (etree.tostring(x))

我得到输出:

b'<sample>show my balance</sample><sample>show me the <subsample value="USD">money</subsample>today</sample></samples></project>'
b'<sample>show me the <subsample value="USD">money</subsample>today</sample></samples></project>'

当我预期:

show my balance
show me the <subsample value="USD">money</subsample>today

我究竟做错了什么?

LMC

此 XPath 将按预期获取文本和元素

result = somenode_etree.xpath(".//sample/text() | .//sample/*")
result
['show my balance', 'show me the ', <Element subsample at 0x7f0516cfa288>, 'today']

根据 OP 请求打印找到的节点

for x in somenode_etree.xpath(".//sample/text() | .//sample/*[node()]"):
    if type(x) == etree._Element:
        print(etree.tostring(x, method='xml').decode('UTF-8'))
    else:
        print(x)

结果

show my balance
show me the 
<subsample value="USD">money</subsample>today
today

最后一个 text() 节点被附加到前一个元素上,这似乎是方法上的一个错误etree.tostring()

或者

>>> for x in somenode_etree.xpath(".//sample/text() | .//sample/*"):
...     if type(x) == etree._Element:
...         print(x.text)
...     else:
...         print(x)
... 
show my balance
show me the 
money
today

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将XML字符串解析为kXML元素

尝试将XML从字符串解析为Python

将字符串解析为 XML 文档以供查看

将“ XML元素”解组为字符串属性

如何使用xq将XML解析为JSON并将特定元素输出为数字?(而不是字符串)

将字符串解析为 JS 语言以及将字符串解析为 json 或 xml

在SQL查询期间将非Xml字符串解析为Xml

将XML解析为从服务器返回XML的字符串

使用xslt将分号将字符串分隔为xml元素

如何将子元素从XML提取到Java中的字符串?

当子元素名称为动态时,将字符串反序列化为 xml

使用xdmp.unquote将字符串解析为XML后如何获取childNodes

将XML字符串解析为C#中的List / DataTable

在Java中,如何将XML解析为字符串而不是文件?

C#XPathDocument使用BOM将字符串解析为XML

将字符串解析为 xml 时丢失了一些内容

使用JAXB将XML数据解析为字符串对象

如何将枚举字符串和值从 XML 模型解析为对象

将XML检索的值存储为字符串变量,以用于子包

使用StAX将XML元素提取为包括属性名称空间的字符串

如何将嵌套的XML元素解组为字符串数组?

将向量元素解析为R中的字符串

硒将元素解析为字符串

XML解析将字符串转换为int

XML列表元素将字符串转换为int

XSLT 将嵌套的 xml 元素重写为一个带有逗号分隔值字符串的元素

使用Java将字符串处理为XML

使用包含“<”的字符串将 VBA 导出为 XML

使用xpath和vtd-xml将子节点和元素文本作为字符串获取