XML 형식 파일 및 문자열을 생성하고 구문 분석하기 위한 Java 예제 코드
1. 기본 지식:
Java에서 XML을 구문 분석하는 방법에는 일반적으로 DOM, SAX, JDOM 및 DOM4J의 네 가지가 있습니다.
2. 사용 소개
1), DOM 소개
(1)
W3C(org.w3c.dom)에서 제공하는 XML 전체를 읽는 인터페이스 메모리를 문서화하고, 각 노드(Node)를 운영하기 위한 DOM 트리를 구축합니다. 장점은 전체 문서가 항상 메모리에 있고 언제든지 모든 노드에 액세스할 수 있다는 것입니다. 트리 순회도 비교적 친숙한 작업입니다. 단점은 메모리를 소비하고 모든 문서를 메모리로 읽어올 때까지 기다려야 한다는 것입니다. 처리하기 전에.
(2) 샘플 코드 :
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <TelePhone> <type name="nokia"> <price>599</price> <operator>CMCC</operator> </type> <type name="xiaomi"> <price>699</price> <operator>ChinaNet</operator> </type> </TelePhone> </root>
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class XMLHandler { public XMLHandler(){ } public String createXML(){ String xmlStr = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); document.setXmlVersion("1.0"); Element root = document.createElement("root"); document.appendChild(root); Element telephone = document.createElement("TelePhone"); Element nokia = document.createElement("type"); nokia.setAttribute("name", "nokia"); Element priceNokia = document.createElement("price"); priceNokia.setTextContent("599"); nokia.appendChild(priceNokia); Element operatorNokia = document.createElement("operator"); operatorNokia.setTextContent("CMCC"); nokia.appendChild(operatorNokia); telephone.appendChild(nokia); Element xiaomi = document.createElement("type"); xiaomi.setAttribute("name", "xiaomi"); Element priceXiaoMi = document.createElement("price"); priceXiaoMi.setTextContent("699"); xiaomi.appendChild(priceXiaoMi); Element operatorXiaoMi = document.createElement("operator"); operatorXiaoMi.setTextContent("ChinaNet"); xiaomi.appendChild(operatorXiaoMi); telephone.appendChild(xiaomi); root.appendChild(telephone); TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transFormer = transFactory.newTransformer(); DOMSource domSource = new DOMSource(document); //export string ByteArrayOutputStream bos = new ByteArrayOutputStream(); transFormer.transform(domSource, new StreamResult(bos)); xmlStr = bos.toString(); //------- //save as file File file = new File("TelePhone.xml"); if(!file.exists()){ file.createNewFile(); } FileOutputStream out = new FileOutputStream(file); StreamResult xmlResult = new StreamResult(out); transFormer.transform(domSource, xmlResult); //-------- } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return xmlStr; } public void parserXML(String strXML){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); StringReader sr = new StringReader(strXML); InputSource is = new InputSource(sr); Document doc = builder.parse(is); Element rootElement = doc.getDocumentElement(); NodeList phones = rootElement.getElementsByTagName("type"); for (int i = 0; i < phones.getLength(); i++) { Node type = phones.item(i); String phoneName = ((Element)type).getAttribute("name"); System.out.println("Phone name = "+phoneName); NodeList properties = type.getChildNodes(); for (int j = 0; j < properties.getLength(); j++) { Node property = properties.item(j); String nodeName = property.getNodeName(); if (nodeName.equals("price")) { String price=property.getFirstChild().getNodeValue(); System.out.println("price="+price); } else if (nodeName.equals("operator")) { String operator=property.getFirstChild().getNodeValue(); System.out.println("operator="+operator); } } } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { XMLHandler handler = new XMLHandler(); String xml = handler.createXML(); System.out.println(xml); handler.parserXML(xml); } }
(3) 요소(Element)와 노드(Node)의 차이점(org.w3c.dom)
Node 객체는 전체 문서 객체 모델의 주요 데이터 유형이며 DOM에서 가장 기본적인 객체이며 문서 트리의 추상 노드를 나타냅니다. 그러나 실제 사용에서는 Node 객체를 직접 사용하는 경우가 거의 없으며 대신 Node 객체의 하위 객체인 Element, Attr, Text 등을 사용합니다.
Element 개체는 HTML 또는 XML 문서의 요소를 나타내며 Node 클래스의 기본 하위 개체입니다. 요소에는 속성이 포함될 수 있으므로 Element에는 해당 속성에 액세스하기 위한 메서드가 있습니다.
요소는 Node에서 상속됩니다. 요소는 작은 범위 정의입니다.
노드에는 Element, Text, Attribute, RootElement, Comment, Namespace 등 여러 하위 유형이 있습니다.
2), SAX
3), JDOM
4), DOM4J
(1) 소개
dom4j는 현재 XML 구문 분석에서 최고입니다(Hibernate 및 Sun의 JAXM도 dom4j를 사용하여 XML을 구문 분석합니다). 기본 XML 문서 표현 이상의 많은 기능이 통합되어 있습니다. XPath 지원, XML 스키마 지원, 대규모 문서 또는 스트리밍 문서에 대한 이벤트 기반 처리.
XPATH를 사용할 때 jaxen.jar을 추가하세요. 그렇지 않으면 다음 오류가 발생합니다.
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230) at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207) at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
(2) 샘플 코드:
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.xml.sax.InputSource; public class XMLHandler { public XMLHandler() { // TODO Auto-generated constructor stub } public String createXML(){ String strXML = null; Document document = DocumentHelper.createDocument(); Element root = document.addElement("root"); Element phone = root.addElement("TelePhone"); Element nokia = phone.addElement("type"); nokia.addAttribute("name", "nokia"); Element price_nokia = nokia.addElement("price"); price_nokia.addText("599"); Element operator_nokia = nokia.addElement("operator"); operator_nokia.addText("CMCC"); Element xiaomi = phone.addElement("type"); xiaomi.addAttribute("name", "xiaomi"); Element price_xiaomi = xiaomi.addElement("price"); price_xiaomi.addText("699"); Element operator_xiaomi = xiaomi.addElement("operator"); operator_xiaomi.addText("ChinaNet"); //-------- StringWriter strWtr = new StringWriter(); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter xmlWriter =new XMLWriter(strWtr, format); try { xmlWriter.write(document); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } strXML = strWtr.toString(); //-------- //------- //strXML=document.asXML(); //------ //------------- File file = new File("TelePhone.xml"); if (file.exists()) { file.delete(); } try { file.createNewFile(); XMLWriter out = new XMLWriter(new FileWriter(file)); out.write(document); out.flush(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //-------------- return strXML; } public void parserXML(String strXML){ SAXReader reader = new SAXReader(); StringReader sr = new StringReader(strXML); InputSource is = new InputSource(sr); try { Document document = reader.read(is); Element root = document.getRootElement(); //get element List<Element> phoneList = root.elements("TelePhone"); List<Element> typeList = phoneList.get(0).elements("type"); for (int i=0;i<typeList.size();i++){ Element element = typeList.get(i); String phoneName = element.attributeValue("name"); System.out.println("phonename = "+phoneName); //get all element List<Element> childList = element.elements(); for (int j=0;j<childList.size();j++){ Element e = childList.get(j); System.out.println(e.getName()+"="+e.getText()); } } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void parserXMLbyXPath(String strXML){ SAXReader reader = new SAXReader(); StringReader sr = new StringReader(strXML); InputSource is = new InputSource(sr); try { Document document = reader.read(is); List list = document.selectNodes("/root/TelePhone/type"); for(int i=0;i<list.size();i++){ Element e = (Element) list.get(i); System.out.println("phonename="+e.attributeValue("name")); List list1 = e.selectNodes("./*"); for(int j=0;j<list1.size();j++){ Element e1 = (Element) list1.get(j); System.out.println(e1.getName()+"="+e1.getText()); } } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub XMLHandler handler = new XMLHandler(); String strXML=handler.createXML(); System.out.println(strXML); handler.parserXML(strXML); System.out.println("-----------"); handler.parserXMLbyXPath(strXML); } }
5)XPATH
( 1) 소개
XPath는 XML 문서에서 정보를 찾는 언어입니다. XPath는 XML 문서의 요소와 속성을 탐색하는 데 사용됩니다.
구체 구문 소개 참조: http://w3school.com.cn/xpath/index.asp
(2) 샘플 코드:
import java.io.IOException; import java.io.StringReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class XMLHandler { public XMLHandler() { // TODO Auto-generated constructor stub } public void parserXML(String strXML){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); StringReader sr = new StringReader(strXML); InputSource is = new InputSource(sr); Document doc = builder.parse(is); XPathFactory xFactory = XPathFactory.newInstance(); XPath xpath = xFactory.newXPath(); XPathExpression expr = xpath.compile("/root/TelePhone/type"); NodeList phones = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); for (int i = 0; i < phones.getLength(); i++) { Node type = phones.item(i); String phoneName = ((Element)type).getAttribute("name"); System.out.println("Phone name = "+phoneName); XPathExpression expr1 = xpath.compile("./*"); NodeList list = (NodeList) expr1.evaluate(type, XPathConstants.NODESET); for(int j =0;j<list.getLength();j++){ Element e1 = (Element) list.item(j); System.out.println(e1.getNodeName()+"="+e1.getTextContent()); } } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (XPathExpressionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String strXML="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"+ "<root>"+ "<TelePhone>"+ "<type name=\"nokia\">"+ "<price>599</price>"+ "<operator>CMCC</operator>"+ "</type>"+ "<type name=\"xiaomi\">"+ "<price>699</price>"+ "<operator>ChinaNet</operator>"+ "</type>"+ "</TelePhone>"+ "</root>"; XMLHandler handler = new XMLHandler(); handler.parserXML(strXML); } }
자세한 Java 생성 및 구문 분석 XML 형식 파일 및 문자열의 예제 코드와 관련된 기사는 PHP 중국어 웹사이트를 주목하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











모바일 XML에서 PDF의 속도는 다음 요인에 따라 다릅니다. XML 구조의 복잡성. 모바일 하드웨어 구성 변환 방법 (라이브러리, 알고리즘) 코드 품질 최적화 방법 (효율적인 라이브러리 선택, 알고리즘 최적화, 캐시 데이터 및 다중 스레딩 사용). 전반적으로 절대적인 답변은 없으며 특정 상황에 따라 최적화해야합니다.

단일 애플리케이션으로 휴대 전화에서 직접 XML에서 PDF 변환을 완료하는 것은 불가능합니다. 두 단계를 통해 달성 할 수있는 클라우드 서비스를 사용해야합니다. 1. 클라우드에서 XML을 PDF로 변환하십시오. 2. 휴대 전화에서 변환 된 PDF 파일에 액세스하거나 다운로드하십시오.

휴대 전화에서 XML을 PDF로 직접 변환하는 것은 쉽지 않지만 클라우드 서비스를 통해 달성 할 수 있습니다. 가벼운 모바일 앱을 사용하여 XML 파일을 업로드하고 생성 된 PDF를 수신하고 클라우드 API로 변환하는 것이 좋습니다. Cloud API는 Serverless Computing Services를 사용하고 올바른 플랫폼을 선택하는 것이 중요합니다. XML 구문 분석 및 PDF 생성을 처리 할 때 복잡성, 오류 처리, 보안 및 최적화 전략을 고려해야합니다. 전체 프로세스에는 프론트 엔드 앱과 백엔드 API가 함께 작동해야하며 다양한 기술에 대한 이해가 필요합니다.

Web.xml 파일을 열려면 다음 방법을 사용할 수 있습니다. 텍스트 편집기 (예 : 메모장 또는 문자 메시지)를 사용하여 통합 개발 환경 (예 : Eclipse 또는 NetBeans)을 사용하여 명령을 편집하십시오 (Windows : Notepad Web.xml; Mac/Linux : Open -A Texted web.xml).

XML 서식 도구는 규칙에 따라 코드를 입력하여 가독성과 이해를 향상시킬 수 있습니다. 도구를 선택할 때는 사용자 정의 기능, 특수 상황 처리, 성능 및 사용 편의성에주의하십시오. 일반적으로 사용되는 도구 유형에는 온라인 도구, IDE 플러그인 및 명령 줄 도구가 포함됩니다.

XML을 PDF로 직접 변환하는 응용 프로그램은 근본적으로 다른 두 형식이므로 찾을 수 없습니다. XML은 데이터를 저장하는 데 사용되는 반면 PDF는 문서를 표시하는 데 사용됩니다. 변환을 완료하려면 Python 및 ReportLab과 같은 프로그래밍 언어 및 라이브러리를 사용하여 XML 데이터를 구문 분석하고 PDF 문서를 생성 할 수 있습니다.

XML 온라인 형식 도구는 지저분한 XML 코드를 읽기 쉬운 형식으로 자동 구성하고 형식을 유지 관리합니다. XML의 구문 트리를 구문 분석하고 서식 규칙을 적용함으로써 이러한 도구는 코드의 구조를 최적화하여 유지 관리 가능성과 팀워크 효율성을 향상시킵니다.

대부분의 텍스트 편집기를 사용하여 XML 파일을여십시오. 보다 직관적 인 트리 디스플레이가 필요한 경우 Oxygen XML 편집기 또는 XMLSPy와 같은 XML 편집기를 사용할 수 있습니다. 프로그램에서 XML 데이터를 처리하는 경우 프로그래밍 언어 (예 : Python) 및 XML 라이브러 (예 : XML.etree.elementtree)를 사용하여 구문 분석해야합니다.
