Skip to main content
 首页 » 编程设计

c#之用于自动完成过滤器的 Xpath 和正则表达式

2024年01月29日24xxx_UU

我有一个巨大的 xml 文档。

类似的东西

<?xml version="1.0" encoding="utf-8"?> 
<elements> 
 <element id="1" name="france" /> 
 <element id="2" name="usa" /> 
 <element id="3" name="Spaïn" /> 
 <element id="4" name="spain and africa" /> 
 <element id="5" name="italie and Spâin" /> 
</elements> 

我想要这样的东西:

string str = "spain"; 
XmlDocument xmlDoc = new XmlDocument();                 
xmlDoc.LoadXml(myXML); 
// Xpath with regex or something very veloce 
XmlNodeList xmlNodeList =  xmlDoc.SelectNodes("//element"+ something);   

xmlNodeList 将包含:

<element id="3" name="Spaïn" /> 
<element id="4" name="france with spâin and africa" /> 
<element id="5" name="italie and Spain" /> 

它必须忽略大小写
和口音

目前我已经

XmlNodeList xmlNodeList = xmlDoc.SelectNodes("/*/*[contains(concat(' ',translate(translate(@n,translate(@n, 'aaabcdefghiiijklmnopqrstuvwxyzâÂABCDEFGHïÏIJKLMNOPQRSTUVWXYZ', ''),''), 'âÂABCDEFGHïÏIJKLMNOPQRSTUVWXYZ','aaabcdefghiiijklmnopqrstuvwxyz'),' '),' "+prefix+" ')]"); 

@n = @name 和前缀可能是:“spain”或“Spain”或“Spaïn”,它给了我 0 个解决方案

请您参考如下方法:

使用

//element[contains(concat(' ',translate(@name,'SPAIN','spain'),' '),' spain ')] 

编辑:现在,问题已经改变,但答案仍然...

只需在翻译模式中添加这些更改,例如:

//element[contains(concat(' ', 
                          translate(@name, 
                                    'SPAÂâIÏïN', 
                                    'spaaaiiin'), 
                          ' '), 
                   ' spain ')] 

注意:当然,更通用的表达式需要更通用的翻译模式。