我有以下XML字符串, 如何编写XPath以获取价值" rest / accounts / 123"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<account xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="self" href="http://localhost/rest/accounts/123"/>
<name>satya</name>
<password>123</password>
</account>
我正在尝试编写JUnit测试用例
mockMvc.perform(get("/rest/accounts/123")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_XML))
.andDo(print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(xpath("/account/atom:link/href()")
.string(containsString("/rest/accounts/123")))
.andExpect(xpath("/account/name/text()").string(equalTo("satya")));
但行
MockMvcResultMatchers.xpath(&#34; /帐户/原子:链路/ HREF()&#34)的字符串(。 Matchers.containsString(&#34; /休息/帐户/ 123&#34)))
投掷错误。
根据建议我将代码更改为
mockMvc.perform(
MockMvcRequestBuilders.get("/rest/accounts/123").contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_XML))
.andDo(print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(
MockMvcResultMatchers.xpath("/account/atom:link/@href,").string(
Matchers.containsString("/rest/accounts/123")))
.andExpect(MockMvcResultMatchers.xpath("/account/name/text()").string(Matchers.equalTo("satya")));
// .andExpect(MockMvcResultMatchers.jsonPath("$.links[*].href").exists());
}
Junit测试用例给出错误
com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: 前缀必须解析为命名空间:atom
答案 0 :(得分:0)
您可以使用substring-after
功能:
substring-after(//atom:link/@href, "http://localhost/")