Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java检查XML文档中是否存在特定的XML元素_Java_Xml - Fatal编程技术网

如何使用java检查XML文档中是否存在特定的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

我有以下问题:

我想检查XML文档是否包含特定的XML元素。例如,当XML文档中有特定的XML元素可用时,是否可以使用返回布尔值的特定API的java方法进行检查

以下是我的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>

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;
  }