2016-04-19 117 views
-7

这是我想从中提取的HTML。Xpath提取部分字符串

<input type="hidden" id="continueTo" name="continueTo" value="/oauth2/authz/?response_type=code&client_id=localoauth20&redirect_uri=http%3A%2F%2Fbg-sip-activemq%3A8080%2Fjbpm-console%2Foauth20Callback&state=72a37ba7-2033-47f4-8e7e-69a207406dfb" /> 

我需要一个XPath来即72a37ba7-2033-47f4-8e7e-69a207406dfb

+0

安置自己的努力,到目前为止,(你当前的代码/正则表达式),所以我们可以帮助你更好。 – dquijada

+1

只是一个友好的提示,你可能想要阅读本页:[如何 - 问问指南](https://stackoverflow.com/help/how-to-ask),所以你可以随时确保你的问题很容易回答并且尽可能清楚。一定要包括你为解决你遇到的问题所做的任何努力,以及当你尝试修复这些问题时发生了什么。另外不要忘记你的显示代码和任何错误信息! –

+0

您可能还想看看[* XSLT:查找字符串中的最后一次出现*](http://stackoverflow.com/questions/3141847/xslt-finding-last-occurance-in-a-string)。 –

回答

1

只提取状态值的XPATH:

//input[@id="continueTo"]/@value 

它将得到节点input的值与ID continueTo。然后它需要先用正则表达式来处理才能得到最终结果。

正则表达式:

`[^=]+$` 

$表示字符串的结束。它会在字符串结尾处得到所有内容,而不是=

2

嗨,你只能获得使用XPath不是它的子字符串属性的值,但如果你想获得子串,那么请做如下图所示

String AttributeValue = driver.findElement(By.id("continueTo")).getAttribute("value"); 
System.out.println("Value of the attribute value is : " + AttributeValue); 

    // now as you want 72a37ba7-2033-47f4-8e7e-69a207406dfb this substring of the vale attribute 
    // then plz apply java split as below 
    String value = "/oauth2/authz/?response_type=code&client_id=localoauth20&redirect_uri=http%3A%2F%2Fbg-sip-activemq%3A8080%2Fjbpm-console%2Foauth20Callback&state=72a37ba7-2033-47f4-8e7e-69a207406dfb"; 
    String [] myValue = value.split("="); 
    System.out.println(myValue[0]); // will print /oauth2/authz/?response_type 
    System.out.println(myValue[1]); // will print code&client_id 
    System.out.println(myValue[2]); // will print localoauth20&redirect_uri 
    System.out.println(myValue[3]); // will print http%3A%2F%2Fbg-sip-activemq%3A8080%2Fjbpm-console%2Foauth20Callback&state 
    System.out.println(myValue[4]); // will print 72a37ba7-2033-47f4-8e7e-69a207406dfb 

希望这有助于你的查询

1

使用下面的代码: -

String val = driver.findElement(By.xpath("//input[@id='continueTo']/@value")).getText(); 

    String [] myValue = val.split("&state="); 

    System.out.println(myValue[1]); 

希望它会帮助你:)