我有一个巨大的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和前缀可能是:“西班牙”或“西班牙”或“Spaïn”它给我0解决方案
答案 0 :(得分:3)
使用
//element[contains(concat(' ',translate(@name,'SPAIN','spain'),' '),' spain ')]
修改:现在,问题已经改变,但答案仍然是......
只需在翻译模式中添加这些更改,例如:
//element[contains(concat(' ',
translate(@name,
'SPAÂâIÏïN',
'spaaaiiin'),
' '),
' spain ')]
注意:当然,更通用的表达式需要更通用的翻译模式。
答案 1 :(得分:2)
string str = "spain";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(myXML);
// Xpath with regex or something very veloce
XmlNodeList xmlNodeList = xmlDoc.SelectNodes("//element[contains(@name,'spain')]");
答案 2 :(得分:1)
<强>更新强>: 由于最初的问题发生了变化,增加了识别单词“西班牙”的要求,不仅在所有可能的大写字母中,还包括重音字符,我已经更新了下面的解决方案,现在“西班牙”与â和/或ïÏ被正确识别。
这是一个比@Alejandro 更通用的解决方案:
如果我们要选择所有元素,其name
属性在任何大小写中包含单词“Spain”,并且可能的单词分隔符都是非字母字符,那么
此XPath表达式:
/*/*[contains(
concat(' ',
translate(translate(@name,
translate(@name, $vAlpha, ''),
' '),
$vUpper,
$vLower),
' '
),
' spain '
)
]
应用于此XML文档时:
<elements>
<element id="1" name="france" />
<element id="2" name="usa" />
<element id="3" name="Spaïn" />
<element id="4" name="france with spâin and africa" />
<element id="5" name="-Spain!" />
<element id="6" name="spain and africa" />
<element id="7" name="italie and Spain." />
</elements>
选择以下元素:
<element id="3" name="Spaïn"/>
<element id="4" name="france with spâin and africa"/>
<element id="5" name="-Spain!"/>
<element id="6" name="spain and africa"/>
<element id="7" name="italie and Spain."/>
在上面的XPath表达式$vLower
中,$vUpper
必须替换为(分别):
'aaabcdefghiiijklmnopqrstuvwxyz'
和
'âÂABCDEFGHïÏIJKLMNOPQRSTUVWXYZ'
$vAlpha
必须由$vLower
和$vUpper
的串联替换。