如何在Java中使用XPath读取子XML

如何在Java中使用XPath读取子XML,java,xml,xpath,soap,xml-parsing,Java,Xml,Xpath,Soap,Xml Parsing,XML文件如下所示: 我写的代码: 列表queryXmlUsingXpathAndReturnList(字符串xml,字符串xpathExpression){ DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance() DocumentBuilder dBuilder=dbFactory.newDocumentBuilder() Document doc=dBuilder.parse(新的ByteArrayInpu

XML文件如下所示:

我写的代码:

列表queryXmlUsingXpathAndReturnList(字符串xml,字符串xpathExpression){

DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance()

DocumentBuilder dBuilder=dbFactory.newDocumentBuilder()

Document doc=dBuilder.parse(新的ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)))

doc.getDocumentElement().normalize()

XPath=XPathFactory.newInstance().newXPath()

NodeList NodeList=(NodeList)xPath.compile(xpathExpression).evaluate(doc,XPathConstants.NODESET)

List returnElements=new ArrayList()

nodeList.each{n->

returnElements.add(n.getTextContent())

}

当我以如下方式传递xpath时:

/信封/Body/CommandResponseData/OperationResult/Operation/ParameterList/ListParameter/StringElement

它返回所有的值。 但是我只想返回其name=“PackageTypeList”的ListParameter值

为此,我将xpath用作:

/信封/Body/CommandResponseData/OperationResult/Operation/ParameterList/ListParameter[@name='PackageTypeList']/StringElement


但它将列表返回为null。

我猜您在XPath表达式中的“CommandResponseData”和“OperationResult”之间缺少“CommandResult”。

我猜您在“CommandResponseData”和“OperationResult”之间缺少“CommandResult”在您的XPath表达式中。

图片是无用的。请编辑您的帖子并将XML添加为文本。图片是无用的。请编辑您的帖子并将XML添加为文本。我似乎粘贴错了。我的XPath是:/Envelope/Body/CommandResponseData/CommandResult/Operation/ParameterList/ListParameter[@name='PackageList']/StringElement仍然获得空响应。如果我将删除[@name='PackageList'],我将获得所有值,但正如我提到的,我需要名称为PackageList的特定数据。我粘贴的数据似乎有误。我的xpath是:/Envelope/Body/CommandResponseData/CommandResult/OperationResult/Operation/ParameterList/ListParameter[@name='PackageList']/StringElement仍然获得空响应。如果我将删除[@name='PackageList'],我将获得所有值,但正如我所提到的,我需要name=PackageList的特定数据。