我正在尝试使用以下xml SoapUI响应中的Xpath
检索原子序号
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetAtomicNumberResponse xmlns="http://www.webserviceX.NET">
<GetAtomicNumberResult><![CDATA[<NewDataSet>
<Table>
<AtomicNumber>47</AtomicNumber>
<ElementName>Silver</ElementName>
<Symbol>Ag</Symbol>
<AtomicWeight>107.87</AtomicWeight>
<BoilingPoint>2485</BoilingPoint>
<IonisationPotential>7.58</IonisationPotential>
<EletroNegativity>1.42</EletroNegativity>
<AtomicRadius>1.34</AtomicRadius>
<MeltingPoint>1235</MeltingPoint>
<Density>10490</Density>
</Table>
</NewDataSet>]]></GetAtomicNumberResult>
</GetAtomicNumberResponse>
</soap:Body>
</soap:Envelope>
试过以下一个
declare namespace ns2='http://www.webserviceX.NET';
//ns2:GetAtomicNumberResponse[1]/ns2:GetAtomicNumberResult[1]
我从[<NewDataset> .... </NewDataSet>]
开始获取所有数据,但我只需要<AtomicNumber>
值。
答案 0 :(得分:3)
这里的问题是CDATA
被视为 Xml 中的字符串以及当作为 XPath 工作时;因此,如果您想使用 XPath 访问CDATA
内的节点,首先需要创建访问CDATA
的路径以及将其内容解析为 Xml的方法
希望 SOAPUI 使用 Saxon , Saxon 包含跟随函数saxon:parse
,它允许解析从<返回的字符串内容em> XPath 作为 Xml 。
请注意, Saxon 版本9.3替换saxon:parse-xml
的此函数,但是 SOAPUI 无法访问,因为它使用 saxon 版本9.1 0.8。
因此,在您的 Property transfer testStep中,您可以使用以下 XPath :
declare namespace ns2='http://www.webserviceX.NET';
(saxon:parse(//ns2:GetAtomicNumberResponse[1]/ns2:GetAtomicNumberResult[1]))//*:AtomicNumber
或者采用较短的 SOAPUI 方式:
(saxon:parse(//*:GetAtomicNumberResponse/*:GetAtomicNumberResult))//*:AtomicNumber
答案 1 :(得分:0)
def respXmlHolder = new XmlHolder(testRunner.testCase.testSteps["GetAtomicNumber"].testRequest.response.getContentAsXml());
respXmlHolder.namespaces["ns"] = "http://www.webserviceX.NET";
def CDATAXml = respXmlHolder.getNodeValue("//ns:GetAtomicNumberResponse/ns:GetAtomicNumberResult");
log.info CDATAXml;
def CDATAXmlHolder = new XmlHolder(CDATAXml);
def atomicNumber=CDATAXmlHolder.getNodeValue("//NewDataSet/Table/AtomicNumber");
com.eviware.soapui.support.UISupport.showInfoMessage("Atomic Number:-"+atomicNumber);
log.info "Atomic Number:-"+atomicNumber
答案 2 :(得分:-3)
C#
XDocument doc = XDocument.Load("XMLFile1.xml");
var result = doc.Descendants(XNamespace.Get("http://www.webserviceX.NET")+"AtomicNumber")
.First();