我有以下问题:
我想检查XML文档是否包含特定的XML元素。是否可以检查(例如,使用特定API的java方法,返回布尔值,XML文档中是否有特定的XML元素?)
这是我的XML文档示例:
<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>
我需要将信息作为布尔值,而XML元素区域是否存在。 XML Document在我自己的java类中用作一种字符串。
感谢您的帮助!
答案 0 :(得分:6)
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;
}
答案 1 :(得分:4)
由于文档是一个字符串,并且假设您不需要因其他原因解析它,我会使用StAX API:
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;
}
这个API相对于SAX解析的优势在于,因为它是一个拉解析器,所以可以在完成之前停止处理文档而不使用像抛出异常这样的人工机制。
答案 2 :(得分:2)
您可以使用Javax XPath执行XPath查询(还有其他XPath API):
http://docs.oracle.com/javase/6/docs/api/javax/xml/xpath/package-summary.html
答案 3 :(得分:1)
如果这就是你所需要的,你可以写你自己的功能:
If (xmlobjectstring.contains("<Area>") and xmlobjectstring.contains("</Area>") { }
你只需解析xmlfile中的不同对象。
您还可以试用SAX-XML Reader:
http://blog.mynotiz.de/programmieren/java-sax-parser-tutorial-773/
如果它变得更复杂,你将需要使用xpath:
http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html
答案 4 :(得分:1)
有两种方法,您可以尝试使用Java Scanner类来查找特定字符串(例如Longitude),假设文档中存在此单词意味着元素存在。
或者你可以定义一个SAXParser,它使用自定义处理程序遍历XML文件中的每个元素,但这可能对你想做的事情来说太复杂了。