8

我有以下问题:

我想检查一个 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 文档在我自己的 java 类中用作一种字符串。

感谢帮助 !

4

5 回答 5

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;
}
于 2013-07-04T09:25:44.637 回答
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 解析的优势在于,由于它是一个拉式解析器,因此可以在完成之前停止处理文档,而无需使用诸如抛出异常之类的人为机制。

于 2013-07-08T12:51:18.500 回答
2

您可以使用 Javax XPath 执行 XPath 查询(还有其他 XPath API):

http://docs.oracle.com/javase/6/docs/api/javax/xml/xpath/package-summary.html

于 2013-07-04T09:23:18.523 回答
2

如果这就是您所需要的,您可以编写自己的函数:

If (xmlobjectstring.contains("<Area>") and xmlobjectstring.contains("</Area>") { }

比你只需要从 xmlfile 中解析出不同的对象。

您还可以试用 SAX-XML 阅读器:

http://blog.mynotiz.de/programmieren/java-sax-parser-tutorial-773/

如果它变得更复杂,您将需要使用 xpath:

http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

于 2013-07-04T09:23:25.977 回答
1

有两种方法,您可以尝试使用 Java Scanner类来查找特定字符串(例如经度),假设文档中存在这个词意味着该元素存在。

或者,您可以定义一个 SAXParser,它使用自定义处理程序来遍历 XML 文件中的每个元素,但这对于您想要做的事情来说可能太复杂了。

于 2013-07-04T09:26:26.247 回答