你如何在XSL中进行大小写转换?
<xsl:variable name="upper">UPPER CASE</xsl:variable>
<xsl:variable name="lower" select="???"/>
Run Code Online (Sandbox Code Playgroud) 我试图让使用XPath功能的XPath查询lower-case或upper-case,但他们似乎并不硒工作(如测试我的XPath之前,我申请的话).
不起作用的示例:
//*[.=upper-case('some text')]
Run Code Online (Sandbox Code Playgroud)
只要我不使用大写和小写,我就可以在复杂路径中找到我需要的节点,甚至使用聚合函数.
有没有人遇到过这个?是否有意义?
谢谢.
考虑两种类型:
<select name="garden">
<option>Flowers</option>
<option selected="selected">Shrubs</option>
<option>Trees</option>
<option selected="selected">Bushes</option>
<option>Grass</option>
<option>Dirt</option>
</select>
Run Code Online (Sandbox Code Playgroud)
是@val为了实际指示value=""属性?
是@value用于指示的innerText值?
例如,如果<option>不包含任何value=""属性会发生什么.那你怎么选择呢?
select/option[@value = "Grass"]
Run Code Online (Sandbox Code Playgroud)
Xpath会自动忽略上述情况的空格吗?它应该修剪?
编辑:
选择多个选项就足够了吗?
select/option[normalize-space(text())="Grass" or normalize-space(text())="Trees"]
Run Code Online (Sandbox Code Playgroud) 我在查找XPath中包含忽略字符大小写的字符串的元素时遇到问题.
我想在HTML页面中找到所有id为id的节点都包含文本"footer",忽略它的大写或小写.
在我的例子中,我有一个不同的html文本,如下所示:
<div id="footer">some text</div>
<div id="anotherfooter">some text</div>
<div id="AnotherFooter">some text</div>
<div id="AnotherFooterAgain">some text</div>
Run Code Online (Sandbox Code Playgroud)
我需要使用XPath选择所有节点(或任何情况下在id中使用"footer"一词的任何组合).
目前我正在使用此xpath,但不适用于UpperCase id
"//*[contains(./@id, 'footer')]/@id"
Run Code Online (Sandbox Code Playgroud)
我用translate()完成了几个测试但是没有按照我的预期工作.
任何的想法?
编辑:我正在使用HtmlAgilityPack与XPath 1.0版本的工作.
我根据环境在web.config文件中转换appsettings的值。当存在名称相同但大小写不同的键时,我遇到了一个问题,如下所示
当地价值
<add xdt:Transform="RemoveAll" xdt:Locator="Match(key)" key="LOGINURL" value="xyf" />
Run Code Online (Sandbox Code Playgroud)
开发价值
<add xdt:Transform="RemoveAll" xdt:Locator="Match(key)" key="LoginUrl" value="abcd" />
Run Code Online (Sandbox Code Playgroud)
我想不区分大小写地替换键的值。
TIA
我希望能够找到包含以下内容的链接:hello,Hello,hEllo,heLlo等.到目前为止,我使用的find_elements_by_partial_link_text是casse敏感:
links = driver.find_elements_by_partial_link_text('hello')
Run Code Online (Sandbox Code Playgroud) 我正在使用这样的XmlDocument类:
divisionsDoc.SelectSingleNode(
string.Format(@"Root/PoliticalDivisions/PoliticalDivision[upper-case(@Code)='{0}']", withCode.ToUpper()));
Run Code Online (Sandbox Code Playgroud)
这导致了错误:
需要命名空间管理器或XsltContext.此查询具有前缀,变量或用户定义的函数.
我收集这是由于upper-caseXPath函数,我理解存在于XPath 2.0而不是1.0(从这里,这里等)
MSDN未指定它使用的XPath版本.我的目标是.NET 4.5.1 - 使用XPath 2.0还不够晚吗?或者是其他地方(.NET之外)定义的东西?
如何找出目标版本的XPath?
请注意,我知道使用的解决方法translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')- 这不是我要求的.
我试图使用XPath实现不区分大小写的搜索.我已经提到了如何在xquery中执行不区分大小写的属性选择器,因此请在标记为重复之前进行检查.我使用Lcase将我的variable(L_search)转换为小写和小写函数.
我原来区分大小写的XPath表达式是:
XPath = "//*[contains(., '"& search &"')]/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
Run Code Online (Sandbox Code Playgroud)
我尝试过很多组合,比如:
XPath = "//*lower-case([contains(., '"& L_search &"')])/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
XPath = "//*[contains(lower-case(.), '"& L_search &"')])/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
Run Code Online (Sandbox Code Playgroud)
但他们都没有产生结果.
这是我正在运行的代码:
Sub ProcessFolder(FolderPath)
On Error Resume Next
Set fldr = fso.GetFolder(FolderPath)
Set Fls = fldr.files
For Each thing in Fls
sFSpec = FSO.GetAbsolutePathName(thing)
objMSXML.async = True
objMSXML.load sFSpec
If 0 = objMSXML.parseError Then
Dim sXPath : sXPath = "//*[contains(., '"& search &"')]/ancestor-or-self::*/*[local-name()='name' and @locale='en']"
Dim querySubject : Set …Run Code Online (Sandbox Code Playgroud)