gpt4 book ai didi

.net - 使用具有多个值的属性选择元素

转载 作者:行者123 更新时间:2023-12-02 03:21:29 26 4
gpt4 key购买 nike

我有 xml,其中包含带有逗号分隔值的属性。我知道这不是一个好主意,但现在还是坚持下去。

我喜欢使用 XPath 选择具有匹配属性值的元素。我希望匹配只考虑完整值,而不是部分匹配。用 XPath 可以做到这一点吗?

请参阅下面的 C# 代码示例。我使用.NET 4.0。

string xml = @"<Foos>
<Foo Tag=""AA, BB"" />
<Foo Tag=""BB"" />
<Foo Tag=""AAA, BBB"" />
</Foos>";

using (StringReader reader = new StringReader(xml))
{
XElement doc = XElement.Load(reader);

// I like to select elements with tag BB:
// <Foo Tag=""AA, BB"" />
// <Foo Tag=""BB"" />

var fooElementsWithTagBB = doc.XPathSelectElements("//Foo[@Tag = 'BB']"); // Selects only <Foo Tag=""BB"" />
fooElementsWithTagBB = doc.XPathSelectElements("//Foo[contains(@Tag, 'BB')]"); // Selects all elements
}

我想要一个一般性查询,我知道

Foo[@Tag = 'AA, BB' or @Tag = 'BB']

在这个例子中可以工作。

最佳答案

使用:

//Foo[contains(concat(',',@Tag, ','), ',BB,')]

如果逗号和下一个值之间有空格,您可以像下面的 XPath 表达式一样消除它们:

//Foo[contains(concat(',',translate(@Tag, ' ', ''), ','), ',BB,')]

基于 XSLT 的验证:

<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="/">
<xsl:copy-of select=
"//Foo[contains(concat(',',translate(@Tag, ' ', ''), ','), ',BB,')]"/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<Foos>
<Foo Tag="AA, BB"/>
<Foo Tag="BB" />
<Foo Tag="AAA, BBB" />
</Foos>

计算 XPath 表达式,并将计算结果(所选节点)复制到输出:

<Foo Tag="AA, BB"/>
<Foo Tag="BB"/>

说明:

这是 sentinel programming 的插图

关于.net - 使用具有多个值的属性选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034172/

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