【发布时间】:2010-12-10 14:35:26
【问题描述】:
我有一个巨大的 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 个解决方案
【问题讨论】:
-
如果您的过滤器是用户提供的,那么一定要以某种方式对其进行转义。例如,如果用户输入了一些包含 xpath 特殊字符的字符串,那么
SelectNodes可能会抛出 -
好问题,+1。请参阅我的答案以获得更通用的解决方案,该解决方案允许任何非字母字符分隔任何单词。 :)
-
@Christophe-Debove:感谢您让这个问题变得更加有趣。请参阅我的更新答案。 :)
-
@Christophe-Debove:我进行了详尽的搜索,看来我的解决方案可能是解决您的问题的唯一方法。特别是,没有一种方法可以在 RegEx 中为“A 的所有重音字符”或任何单个特定字符指定字符类。这意味着即使使用正则表达式,也必须枚举所有重音字符。因此,如果他决定改为编写正则表达式,将不会比我的解决方案更好。
标签: c# xml xpath xmldocument