


Beispielcode-Sharing einiger Techniken zum Parsen von XML- und JSON-Inhalten
Ein kleiner Trick zum Parsen von XML und JSON-Inhalt
Übersicht
In Ermangelung einer einheitlichen Standard Wenn ein System eine Verbindung zu mehreren externen Systemen herstellt, stößt es häufig auf heterogene Antwortdaten von der Anforderungsschnittstelle. Es kann XML oder
JSON zurückgeben. Neben den unterschiedlichen Rückgabetypen unterscheidet sich auch die Inhaltsstruktur. Am Beispiel des XML-Typs:
Schnittstelle 1 gibt Inhalt zurück
<root> <bizKey>16112638767472747178067</bizKey> <returnMsg>OK</returnMsg> <returnCode>200</returnCode> ... </root>
Schnittstelle 2 gibt Inhalt zurück
<root> <bid>16112638767472747178068</bid> <note>成功</note> <returnStatus>1</returnStatus> ... </root>
Wenn der Inhalt jedes Formats in unserem System verarbeitet wird, wird er Im obigen Inhalt geht es uns nur um drei Arten von Informationen, nämlich Geschäfts-ID, Statuswert und Beschreibungsinformationen. Können wir diese drei Arten von Informationen abstrahieren? Verarbeitung.
XPath und JSONPath zum Parsen verwenden . . Um beispielsweise wichtige Informationen der Schnittstelle 1 zu erhalten, können wir drei XPath-Ausdrücke festlegen:
{ bid: "/root/bizKey", code: "/root/returnCode", description: "/root/returnMsg" }
, bid
und code
entsprechend den von unserem System definierten Feldnamen . description
Das Gleiche gilt für das Parsen von JSON-Inhalten, außer dass der JSONPath-Ausdruck definiert ist.
, bid
und code
aus den ursprünglichen XML- und JSON-Daten, description
von Schnittstelle 1. Holen Sie sich
{ bid: '16112638767472747178067', code: '200', description: 'OK' }von Schnittstelle 2 Holen Sie sich
{ bid: '16112638767472747178068', code: '1', description: '成功' }Angenommen, wir erhalten den Statuswert
aus dem Dokument der Schnittstelle 1, um anzuzeigen, dass die Anforderung erfolgreich ist, und erhalten den Statuswert von Schnittstelle 2-Dokument 200
, um anzuzeigen, dass die Anfrage erfolgreich ist. Obwohl sie alle anzeigen, dass die Anfrage erfolgreich ist, können wir sie immer noch nicht intakt in unseren geschäftsbezogenen Tabellen speichern (natürlich müssen diese Antwortdaten trotzdem gespeichert werden). in einer anderen Datensatztabelle, zumindest um die Fehlerbehebung zu erleichtern). 1
Angenommen, unsere geschäftsbezogenen Tabellen sind so gestaltet
因此,我们还必须定义规则把接口1返回的状态值200
转换为我们系统的2
,把接口2返回的状态值1
转换为我们系统的2
。
总结一下,两步走解析XML和JSON数据内容
根据XPath或者JSONPath表达式解析获得重要信息
根据规则转换状态值
第一步解析数据获得重要信息
以XML为例,
public class XmlParseUtils { private DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); private XPathFactory xpathFactory = XPathFactory.newInstance(); /** * * @param param 数据内容 * @param paths 表达式 * @return * @throws Exception */ public Map<String,Object> parse(String param, Map<String,String> paths) throws Exception{ InputSource inputSource = new InputSource(new StringReader(param)); Document document = dbFactory.newDocumentBuilder().parse(inputSource); Map<String,Object> map = Maps.newHashMap(); for(String key : paths.keySet()) { XPath xpath = xpathFactory.newXPath(); Node node = (Node) xpath.evaluate(paths.get(key), document, XPathConstants.NODE); if(node == null) { throw new Exception("node not found, xpath is " + paths.get(key)); } map.put(key, node.getTextContent()); } return map; } }
parse
函数的返回类型也可以是Map<string></string>
,暂且用Map<string></string>
。
第二步根据规则转换状态值
这一步稍稍有点麻烦,不过我们先不考虑代码实现,反正你能想到的可能别人已经帮你实现了。首先我们根据接口文档定义规则,写出规则表达式(或者其他的什么),
又是表达式。假设接口1的返回的状态值比较简单,只有200
表示成功,其他情况都是失败,那么我们可以这样定义规则,
code.equals("200") ? 2: 3
或者
<#if code == "200"> 2 <#else> 3 <#/if>
亦或者
function handle(arg) { if(arg == 200) { return 2; } return 3; } handle(${code})
以上根据同一份文档定义了三种不同类型的状态值转换规则,肯定需要三种不同的实现。下面一一说明,
三目表达式
code.equals("200") ? 2: 3
是一个三目表达式,我们将使用jexl
引擎来解析,利用第一步解析数据获得重要信息的结果,我们可以这样做
public Object evaluateByJexl(String expression, Map<String,Object> context) { JexlEngine jexl = new JexlBuilder().create(); JexlExpression e = jexl.createExpression(expression); JexlContext jc = new MapContext(context); return e.evaluate(jc); }
FreeMarker模板
<#if code == "200"> 2 <#else> 3 <#/if>
处理这段模板我们可以这么做
/** * * @param param FreeMarker模板 * @param context * @return * @throws Exception */ public String render(String param, Map<String,Object> context) throws Exception { Configuration cfg = new Configuration(); StringTemplateLoader stringLoader = new StringTemplateLoader(); stringLoader.putTemplate("myTemplate",param); cfg.setTemplateLoader(stringLoader); Template template = cfg.getTemplate("myTemplate","utf-8"); StringWriter writer = new StringWriter(); template.process(context, writer); return writer.toString(); }
如果FreeMarker
模板比较复杂,从模板预编译成Template
可能会消耗更多的性能,就要考虑把Template
缓存起来。
JavaScript代码段
function handle(arg) { if(arg == 200) { return 2; } return 3; } handle(${code})
这段js
代码中存在${code}
,首先它需要使用FreeMarker
渲染得到真正的handle
方法的调用参数,然后
public Object evaluate(String expression) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); return engine.eval(expression); }
ScriptEngineManager
的性能估计不太乐观,毕竟是一个语言的引擎。
不同转换规则实现的比较
类型 | 实现 | 优点 | 缺点 |
---|---|---|---|
三目表达式 | Jexl | 简单(easy) | 简单(simple) |
FreeMarker模板 | FreeMarker | -- | -- |
JavaScript代码段 | FreeMarker + ScriptEngine | 直观 | 过程复杂,性能问题 |
看起来Freemarker
是一个不错的选择。
至此两步走小技巧已经实现了,都是利用了现成的代码实现。
或许我们会这样的挑战,在做状态值转换时需要知道当前系统某个业务状态值的情况,
此时Freemarker
表达式可能是这样的,
<# assign lastCode = GetLastCode(code)> <#if lastCode == "2"> 2 <#elseif code == "200"> 2 <#else> 3 <#/if>
这里我们可以使用Freemarker的特性,自定义Java函数或工具类,在模板中调用。
Das obige ist der detaillierte Inhalt vonBeispielcode-Sharing einiger Techniken zum Parsen von XML- und JSON-Inhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Die Hauptunterschiede zwischen JSON, XML und RSS sind Struktur und Verwendungszwecke: 1. JSON ist für einen einfachen Datenaustausch geeignet, mit einer kurzen Struktur und leicht zu analysieren. 2. XML ist für komplexe Datenstrukturen mit einer strengen Struktur, aber komplexer Analyse geeignet. 3..

Die Verarbeitung von XML/RSS -Feeds beinhaltet Parsen und Optimierung, und häufige Probleme umfassen Formatfehler, Codierungsprobleme und fehlende Elemente. Zu den Lösungen gehören: 1. Verwenden Sie XML -Verifizierungstools, um nach Formatfehlern zu überprüfen; 2. Gewährleistung der Codierungskonsistenz und verwenden Sie die Chardet -Bibliothek, um Codierung zu erkennen. 3. Verwenden Sie Standardwerte oder überspringen Sie das Element, wenn sie fehlende Elemente haben. 4. Verwenden Sie effiziente Parser wie LXML- und Cache -Parsing -Ergebnisse, um die Leistung zu optimieren. 5. Achten Sie auf Datenkonsistenz und Sicherheit, um XML -Injektionsangriffe zu verhindern.

Zu den Schritten zum Analyse von RSS -Dokumenten gehören: 1. Lesen Sie die XML -Datei, 2. verwenden DOM oder SAX, um XML zu analysieren, 3. Extrahieren von Überschriften, Links und anderen Informationen und 4. Prozessdaten. RSS-Dokumente sind XML-basierte Formate, die zur Veröffentlichung aktualisierter Inhalte, Strukturen und Elemente verwendet werden, die zum Erstellen von RSS-Lesern oder Datenverarbeitungstools geeignet sind.

RSS und XML sind die Kerntechnologien für die Verteilung von Netzwerkinhalten und den Datenaustausch. RSS wird verwendet, um häufig aktualisierte Inhalte zu veröffentlichen, und XML wird verwendet, um Daten zu speichern und zu übertragen. Entwicklungseffizienz und Leistung können durch Nutzungsbeispiele und Best Practices in realen Projekten verbessert werden.

Die Rolle von XML bei RSSFeed besteht darin, Daten zu strukturieren, zu standardisieren und Skalierbarkeit zu bieten. 1.xml macht RSSFeed -Daten strukturiert, was es einfach macht, analysieren und zu verarbeiten. 2.xml bietet eine standardisierte Möglichkeit, das Format von RSSFeed zu definieren. 3.xml Skalierbarkeit ermöglicht es RSSFeed, nach Bedarf neue Tags und Attribute hinzuzufügen.

Bei der Verarbeitung von XML- und RSS -Daten können Sie die Leistung in den folgenden Schritten optimieren: 1) Effiziente Parser wie LXML verwenden, um die Parsengeschwindigkeit zu verbessern; 2) SAX -Parsers verwenden, um den Speicherverbrauch zu reduzieren. 3) Verwenden Sie XPath -Ausdrücke, um die Effizienz der Datenextraktion zu verbessern. 4) Implementieren Sie die parallele Verarbeitung von Multi-Process, um die Verarbeitungsgeschwindigkeit zu verbessern.

RSS2.0 ist ein offener Standard, mit dem Content -Publisher Inhalte strukturiert verteilen kann. Es enthält reichhaltige Metadaten wie Titel, Links, Beschreibungen, Veröffentlichungsdaten usw., mit denen Abonnenten schnell durchsuchen und auf Inhalte zugreifen können. Die Vorteile von RSS2.0 sind seine Einfachheit und Skalierbarkeit. Beispielsweise ermöglicht es benutzerdefinierte Elemente, dh Entwickler können zusätzliche Informationen basierend auf ihren Anforderungen hinzufügen, z. B. Autoren, Kategorien usw.

RSS ist ein XML-basiertes Format, das zur Veröffentlichung häufig aktualisierter Inhalte verwendet wird. 1. RSSFEED organisiert Informationen über die XML -Struktur, einschließlich Titel, Link, Beschreibung usw. 2. Das Erstellen von RSSFeed erfordert das Schreiben in der XML -Struktur und addiert Metadaten wie Sprache und Veröffentlichungsdatum. 3. Die erweiterte Verwendung kann Multimedia -Dateien und klassifizierte Informationen enthalten. 4. Verwenden Sie beim Debuggen XML -Überprüfungswerkzeuge, um sicherzustellen, dass die erforderlichen Elemente existieren und korrekt codiert werden. 5. Optimierung von RSSFeed kann durch Pagen, Zwischenspeichern und Einfachen der Struktur erreicht werden. Durch das Verständnis und Anwenden dieses Wissens können Inhalte effektiv verwaltet und verteilt werden.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Dreamweaver CS6
Visuelle Webentwicklungstools

Dreamweaver Mac
Visuelle Webentwicklungstools

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version
