Как получить значение элемента XML с помощью Java?
Я новичок в XML. Я хочу прочитать следующий XML на основе имени запроса. Пожалуйста, помогите мне в том, как читать ниже XML в Java -
<?xml version="1.0"?>
<config>
<Request name="ValidateEmailRequest">
<requestqueue>emailrequest</requestqueue>
<responsequeue>emailresponse</responsequeue>
</Request>
<Request name="CleanEmail">
<requestqueue>Cleanrequest</requestqueue>
<responsequeue>Cleanresponse</responsequeue>
</Request>
</config>
Ответы
Ответ 1
Если ваш XML является строкой, то вы можете сделать следующее:
String xml = ""; //Populated XML String....
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xml)));
Element rootElement = document.getDocumentElement();
Если ваш XML находится в файле, то Document document
будет создан таким образом:
Document document = builder.parse(new File("file.xml"));
document.getDocumentElement()
возвращает node, который является элементом документа документа (в вашем случае <config>
).
Как только у вас есть rootElement
, вы можете получить доступ к атрибуту элемента (путем вызова метода rootElement.getAttribute()
) и т.д. Для получения дополнительных методов в java org. w3c.dom.Element
Дополнительная информация о java DocumentBuilder и DocumentBuilderFactory. Помните, предоставленный пример создает дерево DOM XML, поэтому, если у вас есть огромные данные XML, дерево может быть огромным.
Обновить. Здесь приведен пример получения "значения" элемента <requestqueue>
protected String getString(String tagName, Element element) {
NodeList list = element.getElementsByTagName(tagName);
if (list != null && list.getLength() > 0) {
NodeList subList = list.item(0).getChildNodes();
if (subList != null && subList.getLength() > 0) {
return subList.item(0).getNodeValue();
}
}
return null;
}
Вы можете эффективно называть его как
String requestQueueName = getString("requestqueue", element);
Ответ 2
Если вы просто хотите получить одно значение из XML, вы можете захотеть использовать библиотеку Java XPath. Для примера см. Мой ответ на предыдущий вопрос:
Он будет выглядеть примерно так:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class Demo {
public static void main(String[] args) {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document dDoc = builder.parse("E:/test.xml");
XPath xPath = XPathFactory.newInstance().newXPath();
Node node = (Node) xPath.evaluate("/Request/@name", dDoc, XPathConstants.NODE);
System.out.println(node.getNodeValue());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ответ 3
Если вам просто нужно одно (первое) значение для извлечения из xml:
public static String getTagValue(String xml, String tagName){
return xml.split("<"+tagName+">")[1].split("</"+tagName+">")[0];
}
Если вы хотите проанализировать весь XML-документ, используйте JSoup:
Document doc = Jsoup.parse(xml, "", Parser.xmlParser());
for (Element e : doc.select("Request")) {
System.out.println(e);
}
Ответ 4
Существует несколько способов сделать это. Возможно, вы захотите проверить XStream или JAXB. Есть учебники и примеры.
Ответ 5
Есть два общих способа сделать это. Вы либо создадите объектную модель домена этого XML файла, посмотрите this
а второй вариант - использование синтаксического анализа, управляемого событиями, что является альтернативой представлению XML DOM. Imho вы можете найти лучшее общее сравнение этих двух основных методов здесь. Конечно, есть гораздо больше информации о обработке xml, например, если вам дано определение схемы XML (XSD), вы можете использовать JAXB.
Ответ 6
следующие ссылки могут помочь
http://labe.felk.cvut.cz/~xfaigl/mep/xml/java-xml.htm
http://developerlife.com/tutorials/?p=25
http://www.java-samples.com/showtutorial.php?tutorialid=152
Ответ 7
Существуют различные API-интерфейсы, доступные для чтения/записи XML файлов через Java.
Я хотел бы использовать StaX
Также это может быть полезно - Java XML API
Ответ 8
Поскольку вы используете это для конфигурации, лучшим вариантом будет apache commons-configuration. Для простых файлов его проще использовать, чем "сырые" синтаксические анализаторы XML.
См. Практическое руководство XML
Ответ 9
Вы можете создать класс, который расширяет org.xml.sax.helpers.DefaultHandler и вызовет
start_<tag_name>(Attributes attrs);
и
end_<tag_name>();
Ибо это:
start_request_queue(attrs);
и др.
И затем расширяет этот класс и реализует синтаксические анализаторы XML файлов, которые вы хотите. Пример:
... public void startElement (String uri, String name, String qname, org.xml.sax.Attributes attrs) throws org.xml.sax.SAXException { Класс [] args = новый класс [2]; args [0] = uri.getClass(); args [1] = org.xml.sax.Attributes.class; пытаться { String mname = name.replace( "-", "); java.lang.reflect.Method m = getClass(). getDeclaredMethod (" start" + mname, args); m.invoke(это, новый Object [] {uri, (org.xml.sax.Attributes) attrs}); }
catch (IllegalAccessException e) { throw new RuntimeException (e); }
catch (NoSuchMethodException e) { throw new RuntimeException (e); }
catch (java.lang.reflect.InvocationTargetException e) { org.xml.sax.SAXException se = new org.xml.sax.SAXException(e.getTargetException()); se.setStackTrace(e.getTargetException() getStackTrace().); }
и в конкретном парсер конфигурации:
public void start_Request (String uri, org.xml.sax.Attributes attrs) { // убедитесь, что правильно прочитали атрибуты System.err.println( "Запрос, name=" + attrs.getValue(0); }