gpt4 book ai didi

xml - XPATH 过滤掉带有字母的记录

转载 作者:行者123 更新时间:2023-12-03 16:06:32 26 4
gpt4 key购买 nike

我正在寻找一个 XPATH 表达式,它将执行搜索以确保字段中没有字母。例如输入 XML:

<?xml version="1.0" encoding="UTF-8"?>
<payload>
<records>
<record>
<number>123</number>
</record>
<record>
<number>456</number>
</record>
<record>
<number>78A</number>
</record>
</records>
</payload>

我希望它也过滤掉第三个结果,因为它在标签中有一个字母。所以返回这个:
<?xml version="1.0" encoding="UTF-8"?>
<payload>
<records>
<record>
<number>123</number>
</record>
<record>
<number>456</number>
</record>
</records>
</payload>

可以在简单的 XPATH 中做到这一点吗?

所以像 /payload/records/record[reg expression here?]
@Cylian

这就是我的意思:
<?xml version="1.0" encoding="UTF-8"?>
<payload>
<records>
<record>
<number>123</number>
<time>12pm</time>
<zome>UK</zome>
</record>
<record>
<number>456</number>
<time>12pm</time>
<zome>UK</zome>
</record>
<record>
<number>78A</number>
<time>12pm</time>
<zome>UK</zome>
</record>
</records>
</payload>

最佳答案

XPath(1.0 和 2.0)是一种用于 XML 文档的查询语言。

因此 XPath 表达式仅选择节点集(或提取其他数据),但不能更改 XML 文档 的结构(如删除节点)。

因此,不可能构造一个将提供的 XML 文档更改为所需的 XPath 表达式。

使用 XSLT 或 XQuery 可以轻松完成此任务(不那么容易):

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="record[translate(number, '0123456789', '')]"/>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:
<payload>
<records>
<record>
<number>123</number>
</record>
<record>
<number>456</number>
</record>
<record>
<number>78A</number>
</record>
</records>
</payload>

产生所需的正确结果:
<payload>
<records>
<record>
<number>123</number>
</record>
<record>
<number>456</number>
</record>
</records>
</payload>

关于xml - XPATH 过滤掉带有字母的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com