首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmllint / Xpath提取父节点,其子节点包含来自google购物提要的文本

xmllint / Xpath提取父节点,其子节点包含来自google购物提要的文本
EN

Stack Overflow用户
提问于 2020-10-23 16:30:30
回答 1查看 363关注 0票数 0

到目前为止,我正在尝试提取包含文本值为"2020-2021“的g:custom_label_0的所有"item”节点,我设法找到了包含子g:custom_label_0的所有节点,但我没有设法根据字段的文本值进行过滤。

下面是示例XML:

代码语言:javascript
复制
   <item>
        <description>[...]</description>
        <g:availability>in stock</g:availability>
        <g:brand>Barts</g:brand>
        <g:condition>new</g:condition>
        <g:custom_label_0>2020-2021</g:custom_label_0>
        <g:id>108873/10-3</g:id>
        <g:image_link>[...]</g:image_link>
        <g:price>26.99 EUR</g:price>
        <g:sale_price>26.99 EUR</g:sale_price>
        <g:shipping>
            <g:country>NL</g:country>
            <g:price>4.50 EUR</g:price>
        </g:shipping>
        <g:shipping_weight>7.95</g:shipping_weight>
        <link>[....]</link>
    </item>
   ...

存在包含除2020-2021之外的其他值的节点,但我希望提取包含此文本的所有完整项目节点。下面是我为了提取所有具有可用字段的节点所做的工作。

代码语言:javascript
复制
xmllint --xpath '//item["g:custom_label_0"]' myfile.xml 

我试着通过方括号等添加一个文本过滤器,但我感觉custom_label_0周围的引号可能会带来麻烦。在引号中添加更多的过滤器会被接受(没有错误),但我不能在其中添加更多的引号来过滤字符串。

正常工作,不会抛出错误:

代码语言:javascript
复制
xmllint --xpath '//item["g:custom_label_0[text()]"]' myfile.xml 

如果我现在想过滤文本,我需要再次使用引号。对它们进行转义会破坏代码。当这两种类型的引号都已经使用时,我如何进一步过滤文本"2020-2021“?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 22:03:46

您是对的;围绕g:custom_label_0的引号正在制造麻烦。这使它成为一个字符串,并且总是正确的,所以它将返回所有的item元素。

g:是一个名称空间前缀。要将名称空间绑定到xmllint中的前缀,必须在shell模式下使用它(参见https://stackoverflow.com/a/8266075/317052的示例)。

另一种方法是测试元素名称以选择g:custom_label_0元素,然后测试该元素的值以查看它是否为2020-2021

例如。

代码语言:javascript
复制
xmllint --xpath '//item[*[name()="g:custom_label_0"][.="2020-2021"]]' myfile.xml
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64496577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档