如何使用java检查XML文档中是否存在特定的XML元素
我有以下问题: 我想检查XML文档是否包含特定的XML元素。例如,当XML文档中有特定的XML元素可用时,是否可以使用返回布尔值的特定API的java方法进行检查 以下是我的XML文档示例:如何使用java检查XML文档中是否存在特定的XML元素,java,xml,Java,Xml,我有以下问题: 我想检查XML文档是否包含特定的XML元素。例如,当XML文档中有特定的XML元素可用时,是否可以使用返回布尔值的特定API的java方法进行检查 以下是我的XML文档示例: <Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceRequest> <RequestPayload> <LocationInformat
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ServiceRequest>
<RequestPayload>
<LocationInformationRequest>
<InitialInput>
<GeoRestriction>
<Area>
<PolylinePoint>
<Longitude>11.0</Longitude>
<Latitude>12.0</Latitude>
<Altitude>13.0</Altitude>
</PolylinePoint>
</Area>
</GeoRestriction>
</InitialInput>
</LocationInformationRequest>
</RequestPayload>
</ServiceRequest>
</Test>
11
12
13
无论XML元素区域是否存在,我都需要作为布尔值的信息。XML文档在我自己的java类中作为字符串类型使用
谢谢你的帮助 您可以使用Javax XPath执行XPath查询(还有其他XPath API):
如果您只需要这些,您可以编写自己的函数:
If (xmlobjectstring.contains("<Area>") and xmlobjectstring.contains("</Area>") { }
If(xmlobjectstring.contains)(“
如果变得更复杂,则需要使用xpath:
有两种方法,您可以尝试Java类查找特定字符串(例如经度),假设文档中存在这个词意味着元素存在
或者,您可以定义一个SAXParser,它使用自定义处理程序遍历XML文件中的每个元素,但这对于您想要执行的操作来说可能太复杂了。由于文档是字符串,并且假设您不需要出于其他原因对其进行解析,我将使用:
与SAX解析相比,此API的优势在于,由于它是一个拉式解析器,因此可以在完成之前停止处理文档,而无需使用诸如抛出异常之类的人工机制。在一般情况下,将文档扫描为文本会使您容易出现误报,因为可以合法地包含匹配项在CDATA部分或注释中。SAX方法更好。
public boolean isElementExists(String content) {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
Document inputDoc = documentBuilderFactory.newDocumentBuilder().parse(new StringReader(content));
NodeList nodeList = inputDoc.getElementsByTagName(tagName);
return nodeList.getlength() == 0 ? true : false;
}
public static boolean hasElement(String document, String localName)
throws XMLStreamException {
Reader reader = new StringReader(document);
XMLStreamReader xml = XMLInputFactory.newFactory()
.createXMLStreamReader(reader);
try {
while (xml.hasNext()) {
if (xml.next() == XMLStreamConstants.START_ELEMENT
&& localName.equals(xml.getLocalName())) {
return true;
}
}
} finally {
xml.close();
}
return false;
}