0
私は思っていたことを単純にしようとしています.Xpathノードの属性が特定の値であると主張してください。 XPathFactoryを使用してXpath属性を評価する
<?xml version="1.0" encoding="UTF-8"?><tag0:AAA_ControlRS xmlns:tag0="http://www.xmltravel.com/fab/2002/09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Target="test" Version="2002A" xsi:type="AAA_ControlRS">
<tag0:TestInfo TestId="THFTEST"/>
<tag0:SessionInfo CreateNewSession="true"/>
<AAASessionId="8IzujBAVOPVQrO1ySpNBoJ9x"/>
<tag0:ControlResponse Success="true"/>
</tag0:AAA_ControlRS>
( "true" または "false" を返します)
<ControlResponse Success="true"/>
とここに私のコードです:
//REQUEST
String controlRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n...
//bunch of xml here";
//RESPONSE
String myControlResponse = given().
when().
request().
contentType("text/xml").
body(myControlRequest).
when().post().andReturn().asString();
//Parse response and get relevant node via Xpath
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder;
Document doc;
try {
builder = factory.newDocumentBuilder();
doc = builder.parse(new InputSource((new StringReader(myControlResponse))));
//Xpath Factory Object
XPathFactory xPathFactory = XPathFactory.newInstance();
//Xpath Object
XPath xpath = xPathFactory.newXPath();
String controlResponse = getNodeValue(doc, xpath);
assertEquals("true", controlResponse);
} catch (ParserConfigurationException | org.xml.sax.SAXException | IOException e) {
e.printStackTrace();
}
}
private static String getNodeValue(Document doc, XPath xpath) {
String controlResponse = null;
try {
XPathExpression expr =
xpath.compile("//ControlResponse/@Success");
controlResponse = (String) expr.evaluate(doc, XPathConstants.STRING);
} catch (XPathExpressionException e) {
e.printStackTrace();
}
return controlResponse;
}
xpathがに評価する - :ノードは次のように何も値、onlya属性値を持っていません私が文字列が "真"であると予想するとnullです。 アトリビュート値を取得し、文字列「true」または「false」が含まれているかどうかを確認したい
私は何をしようとしていますか?
ありがとう、私はコードを更新しましたが、XPath式はnullに評価されますか? – Steerpike
@Steerpikeは答えを更新しました...あなたの入力XMLに名前空間がありますか? – Markus
ありがとうございます。私は名前空間について確信していますが、私はグーグルだと私はあなたが正しいと思います。私は解析したい完全なXML応答を投稿しました(このXMLは応答として送信されます)。私はRestAssurred(試して)を使用していて、そのライブラリを使って名前空間を扱うことができるかもしれませんか? – Steerpike