gpt4 book ai didi

java - 未使用 NodeList 获取 XML 标记值

转载 作者:太空宇宙 更新时间:2023-11-04 11:03:35 25 4
gpt4 key购买 nike

我将此响应 XML 作为字符串

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:SRVResponse>
<ns:Response>
<ns1:ServiceHeader>
<ns1:rsHeader>
<ns1:status>
<ns1:finStatus>E</ns1:finStatus>
</ns1:status>
</ns1:rsHeader>
</ns1:ServiceHeader>
</ns:Response>
</ns:SRVResponse>
</soapenv:Body>
</soapenv:Envelope>

我正在尝试获取 finStatus。该标签值有时带有 ns1 或 ns2 等。但我只需要获取 finStatus 的值即可。

我正在尝试以下方式。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(strResponse));
if(is != null) {
Document doc = db.parse(is);
NodeList idDetails = doc.getDocumentElement().getElementsByTagNameNS("*", "finStatus");
if(idDetails != null) {
int length = idDetails.getLength();
for (int i = 0; i < length; i++) {
if (idDetails.item(i).getNodeType() == Node.ELEMENT_NODE) {
Element el = (Element) idDetails.item(i);
if (el.getNodeName().contains("finStatus")) {
status = getElementTextContent(el, "finStatus");
System.out
.println("Status :"+status);
}
}
}
}
}

getElementTextContent方法如下

public static String getElementTextContent(Element el, String elemTag) {
String result = "";
if(el.getElementsByTagName(elemTag) != null) {
if(el.getElementsByTagName(elemTag).item(0) != null) {
if(el.getElementsByTagName(elemTag).item(0).getTextContent() != null) {
result = el.getElementsByTagName(elemTag).item(0).getTextContent();
} else {
result = "";
}
}
}
return result;
}

我没有得到任何异常,但得到空值。这其中缺少什么?任何想法将不胜感激。

最佳答案

你可以尝试这个,因为这在我的代码中起作用。你需要给出绝对路径

这是我正在使用的 xml

     * xmlInput =
* "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n"
* + " <soap:Body>\r\n" +
* " <ns1:LoginProcesRequest xmlns:ns1=\"http://xmlns.oracle.com/BioRad_jws/BR_GetSFDCLogin/GetSFDCDetailsProcess\">\r\n"
* + " <ns1:Login>1000</ns1:Login>\r\n" +
* " <ns1:Company>1000</ns1:Company>\r\n" +
* " </ns1:LoginProcesRequest>\r\n" + " </soap:Body>\r\n" +
* "</soap:Envelope>";
*/

使用转换响应

 StringWriter out = new StringWriter();
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source sourceContent = soapResponse.getSOAPPart().getContent();
transformer.transform(sourceContent, new StreamResult(out));
String response = out.toString();

DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

Document doc = docBuilder.parse(new InputSource(new StringReader(
response)));

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();

header.setSessionId((String) xpath
.evaluate(
"/Envelope/Body/LoginProcessResponse/loginResponse/sessionId",
doc, XPathConstants.STRING));

关于java - 未使用 NodeList 获取 XML 标记值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46646455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com